数字太大太大,long long放不下,因此用字符数组暂存,a[0],b[0]存放数的最低位,所以开数组来存是明智的选择。。。。。
#include <cstdio>
#include <cstring>
#define MAXN 210
int a[MAXN+10];
int b[MAXN+10];
char s1[MAXN+10];
char s2[MAXN+10];
int main()
{
scanf("%s", s1);
scanf("%s", s2);
int i, j;
//赋初值 0 ,相当于用 0 填充数组
memset( a, 0, sizeof(a));
memset( b, 0, sizeof(b));
// 将字符转换为相对应的数字,存入a[]、b[]数组中,a[0]、b[0]对应于个位
int len1 = strlen( s1);
j = 0;
for( i = len1 - 1; i >= 0 ; i --)
a[j++] = s1[i] - '0';
int len2 = strlen(s2);
j = 0;
for( i = len2 - 1; i >= 0 ; i--)
b[j++] = s2[i] - '0';
for( i = 0; i < MAXN ; i ++ ) {
a[i] += b[i]; //逐位相加,相加最大值也就 18 ,放心加
if( a[i] >= 10 ) { //看是否要进位
a[i] -= 10;
a[i+1] ++; //进位
}
}
int zor_num = 0 ; //此变量用于跳过多余的0
for( i = MAXN; i >= 0; i-- ) {
if( zor_num )
printf("%d", a[i]); //如果多余的0已经都跳过,则输出
else if( a[i] ) {
printf("%d", a[i]);
zor_num = 1 ; //碰到第一个非0的值,就说明多余的0已经都跳过 (去前导 0 ,方法不唯一)
}
}
if(!zor_num) //不满足上面条件,zor_num任然是 0
printf("0");
return 0;
}
加法完成。。。。。。。。。。。。