这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
//ID:百练oj2981 大整数加法 //网站:C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛 //地址:http://www.cppleyuan.com/ //个人主页:www.wutianqi.com
总结: 思想:用字符串输入---》每个元素都减去'0',用整型数组保存,然后两整型数组相加。中间记的在用整型数组保存时是倒序的。这样可以用于超出一位。 注意:对于0 0的特殊情况要考虑,且记得忽略前置无用的0。
#define MAX_LEN 200
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
int main()
{
scanf("%s", szLine1);
scanf("%s", szLine2);
int i, j;
memset(an1, 0, sizeof(an1));
memset(an2, 0, sizeof(an2));
int nLen1 = strlen(szLine1);
j = 0;
for(i = nLen1-1; i >= 0; i--)
an1[j++] = szLine1[i] - '0';
int nLen2 = strlen(szLine2);
j = 0;
for(i = nLen2-1; i >= 0; i--)
an2[j++] = szLine2[i] - '0';
for(i = 0; i < MAX_LEN; i++)
{
an1[i] += an2[i];
if(an1[i] >= 10)
{
an1[i] -= 10;
an1[i+1]++;
}
}
bool bStartOutput = false;
if(strcmp(szLine1, "0") == 0 && strcmp(szLine2, "0") == 0)
printf("0");
else
{
for(i = MAX_LEN; i >= 0; i--)
{
if(bStartOutput)
printf("%d", an1[i]);
else if(an1[i])
{
printf("%d", an1[i]);
bStartOutput = true;
}
}
}
putchar('\n');
return 0;
}