由于c++各类型存储都有一定的范围限制,因此在处理大数子的计算上需要使用到模拟算法,采用小学学过的模拟竖式的思想进行计算

高精度加法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(){
string s1,s2;
int a1[210],a2[210],a3[210]={};
getline(cin,s1);
getline(cin,s2);
//存储在数组中依次相加存储在a3中(过程省略)
//下面是处理进位的代码
for(int i = 0;i < len; i ++){
if(a3[i] > 10){
a3[i+1] = a3[i+1] + a3[i] / 10;
a3[i] = a3[i] % 10;
}
a3[i] = a1[i] + a2[i];
}
//逆序输出a3得到结果
}

高精度减法

1
2
3
4
5
6
7
8
9
10
11
12
int main(){
//初始化相同
//下面处理借位相减的过程
for(int i = 0;i < len;i ++){
if(a1[i] < a2[i]){
a1[i] += 10;
a1[i+1] -= 1;
}
a3[i] = a1[i] - a2[i];
}
//输出同理,定义flag判断结果的正负性
}