这道题的话,记得把d数组开大点,然后就是普通的高精度加法的计算了,把输入的字符串,翻转存到int数组内,便于相加,也有进位,不断保存数字,carry所剩于的数即为超过int原始相加的两个数的长度,但是由于是相加,最多只可能有一位,区别乘法操作,直接存入即可
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct S {
int d[1050];
int len;
S() {
memset(d,0,sizeof(d));
len = 0;
}
};
void TOint(char s[],S &a) {
a.len = strlen(s);
for(int i =0; i < a.len; i++) {
a.d[i] = s[a.len-1-i] - '0';
}//从个位开始 0下标存 好计算
}
void addd(S a,S b,S &c) {
int carry = 0;
c.len = 0;
for(int i =0; i<a.len||i<b.len; i++) {
int temp = a.d[i]+b.d[i] + carry;
c.d[i] = temp % 10;
carry = temp / 10;
c.len++;
}
if( carry != 0) c.d[c.len++] = carry;//只可能有一位,看上面的for并且只是单个数
}
int main() {
char tempa[1100];
char tempb[1100];
while(scanf("%s",tempa)!=EOF&&scanf("%s",tempb)!=EOF) {
S a,b;
TOint(tempa,a);
TOint(tempb,b);
// for(int i = 0;i<strlen(tempa);i++){
// printf("%d",a.d[i]);
// }
S c;
addd(a,b,c);
int num = 0;
for(int i =c.len-1; i>=0; i--) {
printf("%d",c.d[i]);
}
printf("\n");
}
return 0;
}