注意:因为可能是个非常大的数,所以不能用一个long之类的数字相加这种方法。所以需要数组输出
#include <stdio.h>
int main()
{
char str1[10000] = {0};
char str2[10000] = {0};
scanf("%s", str1);
scanf("%s", str2);
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = (len1 > len2)?(len1):(len2);
int array1[len];
int array2[len];
int array[len+1]; //保存的数可能比最大的要多一位
memset(array1, 0, len*sizeof(int));
memset(array2, 0, len*sizeof(int));
memset(array, 0, (len+1)*sizeof(int));
int index = 0;
for(int i = len1-1; i >= 0 && index < len1; i--)
{
if(str1[i] >= '0' && str1[i] <= '9')
{
array1[index++] = str1[i]-'0';
}
}
index = 0;
for(int i = len2-1; i >= 0 && index < len2; i--)
{
if(str2[i] >= '0' && str2[i] <= '9')
{
array2[index++] = str2[i]-'0';
}
}
#if 0
for(int i = 0; i < len; i++)
{
printf("%d", array1[i]);
}
printf("\n");
for(int i = 0; i < len; i++)
{
printf("%d", array2[i]);
}
printf("\n");
#endif
int flag = 0;
int num = 0;
int count = 0;
for(int i = 0; i < len+1; i++)
{
if(i < len) //遍历1、2数组中的数据
{
num = array1[i] + array2[i] + flag;
}
else //最后检查flag是否为0,不是需要进1.
{
num = flag;
}
if(flag != 0)
{
flag = 0; //第二次判断前,需要情况flag位
}
if(num >= 10)
{
flag = 1; //两个个位数相加,不会超过20
if(num == 10)
{
num = 0;
}
else
{
num = num % 10; //取个位数字
}
}
array[i] += num;
count++;
num = 0; //每次添加完都有清空
}
for(int i = count-1; i >= 0; i--)
{
/* 因为需要判断是否有进1位的数,但是0又不能打印 */
if(i == count-1 && array[i] == 0)
{
//!=号无反应,只能用这个方法显示不打印
}
else
{
printf("%d", array[i]);
}
}
printf("\n");
return 0;
}