Integer Inquiry
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17861 Accepted Submission(s): 4650
Problem Description
One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
``This supercomputer is great,'' remarked Chip. ``I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
``This supercomputer is great,'' remarked Chip. ``I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
Input
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
The final input line will contain a single zero on a line by itself.
Output
Your program should output the sum of the VeryLongIntegers given in the input.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
Sample Input
1 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
Sample Output
370370367037037036703703703670
解题思路:这道题用大数算法,我们知道这么大的数用整型去存储会溢出的,因此我们按照字符串去处理。我们先把两个要运算的字符串进行逆置,就想我们平时在做加法题时候,都是从低位往高位加并伴随着进位。but这个题有一个坑就是输入0要输出0
题目代码:#include<stdio.h>#include<string.h>char a[2000]; //存放和char b[2000]; //存放输入的数char c[2000];int main(){int N,i;scanf("%d",&N);while(N--){memset(b,'0',sizeof(b)); //先将数组b刷成字符0while(1) //永循环{scanf("%s",a); //输入要相加的数字if(!strcmp(a,"0")) //看着字符串是不是0,是0结束break;memset(c,'0',sizeof(c)); //先将数组c刷成字符0int len=strlen(a); //测a的长度for(i=0;i<len;i++)c[len-i-1]=a[i]; //对a中字符进行逆置int ans=0; //ans代表进位,最初为0for(i=0;i<2000;i++){int temp=(c[i]-'0')+(b[i]-'0')+ans; //相应位置上的数字相加并加上该位的进位。if(temp>9)ans=temp/10; //进位elseans=0;b[i]=temp%10+'0';}}for(i=2000-1;i>=0;i--)//去除前导0if(b[i]!='0')break;if(i==-1)//这种情况是输入的所有数都为0printf("0"); //如果输入的是0,要输出0else{for(;i>=0;i--)//printf("%c",b[i]);}printf("\n");if(N>0)//格式控制printf("\n");}return 0;}