题目链接:http://poj.org/problem?id=1503
高精度加法,要求输出所有输入的数的和;
100位的数,无法用变量储存,解题方法不难,简单模拟加法的过程;也就是满10进位的方法,我们利用数组,储存每一位数,然后由个位开始相加在加上上一位的进位数,得出这个位上的数,和下一个进位数,其中有一点需要注意,也是我一直WA的一个地方,
我用的数组的第一位数储存,字符串长度,
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include <iostream> #include <cstdio> #include <cstring> using namespace std;
int main() { int i,j,jw,sum,num[105]; char str[105]; memset(num,0,sizeof(num)); while(1) { cin>>str; if(strcmp(str,"0")==0) break; num[0]=strlen(str); jw=0;sum=0; for(j=1;j<=num[0];j++) { sum=num[j]+str[num[0]-j]-'0'+jw; num[j]=sum%10; jw=sum/10; } num[num[0]+1]+=jw; } int flag=0; for(i=104;i>=1;i--) { if(num[i]!=0) flag=1; if(flag==1) cout<<num[i]; } cout<<endl; }
|