大数加法(处理不了负数)
大数加法(处理不了负数)
高精度的加法思想
1.把大数存到字符串;
2.字符串的每个字符数字都通过ASCII转换存到数组,注意的是要低位存在数组开头:a[i] = s[len-i-1]-'0';
3.获取最大的数长度:max(len1,len2) ;
4.把a,b值加入到c数组: c[i] = a[i]+b[i];
5.c数组加法进位的算式:
① c[i+1] += c[i]/10;
② c[i] %= 10;
6.数字溢出,长度+1;
7.反向输出结果;
代码实现
#include<iostream>
#include<string>
using namespace std;
string s1, s2;
int a[10000], b[10000], c[100001];
int main() {
// 1.输入值,长度
cin >> s1 >> s2;
int len1 = s1.size();
int len2 = s2.size();
// 2.把字符转为整数存到数组
// 注意要个位存到数组开头
for (int i = 0; i < len1; i++) {
a[i] = s1[len1 - i - 1] - '0';
}
for (int i = 0; i < len2; i++) {
b[i] = s2[len2 - i - 1] - '0';
}
// 3.获取最大的数。
int len = max(len1, len2);
// 对各个位数进行相加
for (int i = 0; i < len; i++) {
c[i] = a[i] + b[i];
}
//4.进位
for (int i = 0; i < len; i++) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
//5.溢出
while (c[len] == 0 && len > 0) {
len--;
}
if (c[len] > 0) {
len++;
}
//6.反向输出
for (int i = len - 1; i >= 0; i--) {
cout << c[i];
}
return 0;
}

浙公网安备 33010602011771号