摘要:
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
output:370370367037037036703703703670
基本思路很简单,就是简单的进位,注意最后一次进位要特殊处理.
(1)要特殊注意的几点[1]可能输入是最大的9999…9999(100个9),输入了100行时,最后的结果可能超过100位,最多可以是102位.
(2)注意当输入是00123开头的时候,必须要特殊处理.开头的0(这点难到了我很久,最后才确定可能是这个bug导致不能AC)
#include "stdafx.h"
#include "iostream"
#include "string.h"
using namespace std;
int main()
{
int sum[104] = {0};
char add[101] = {'0'};
int a,b,c = 0;//c代表可能的进位
int length,top = 102,sumstart = 100;
while(1)
{
memset(add,0,sizeof(add));
cin >> add;
if(add[0] == '0'&&strlen(add)==1)
break;
length = strlen(add);
top = 102,c = 0;
while(length--)//进行新输入的计算
{
a = add[length] - ('0' - 0);
b = sum[top];
b = a + b + c;//b是和,c是可能的进位,a是新输入的加数
c = b>=10 ? 1:0;//确定b的进位
sum[top--] = b>=10?b%10:b;//和的存储是从第99位存储最后一位的,这样方便进位
if(b!=0)
sumstart = sumstart < top ? sumstart:top+1;//记录最后的位置
}
if (c>0)//如果存在最后的进位
{
sum[top--] += c;
sumstart = sumstart < top ? sumstart:top+1;//记录最后的位置
}
}
while(sumstart<=102)
{
cout<<sum[sumstart++];
}
return 0;
}