1066 - 大大的求和
时间限制 : 1 秒
内存限制 : 32 MB
小明在做小红给他出的算术题加法题,但是小红为了治一治小明懒惰的毛病,给他出的数都很大,这下小明郁闷了,想请你帮忙。
题目输入
输入的第一行是一个正整数N,表示一共有N组测试数据。
每组数据由1~100行正整数组成,每行正整数的长度不大于100位。
当输入0时,表示此组数据输入完毕。
题目输出
对于每组输入数据,输出所有数字的总和。每两组输出数据之间有一个空行。
输入/输出样例
输入格式
2 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0 12 34 0
输出格式
370370367037037036703703703670 46
C语言解答
#include<stdio.h> #include<string.h> void Add(char *str1,char *str2,char *str3) { int i,j,i1,i2,tmp,carry; int len1=strlen(str1),len2=strlen(str2); char ch; i1=len1-1; i2=len2-1; j=carry=0; for(;i1>=0&&i2>=0;++j,--i1,--i2) { tmp=str1[i1]-'0'+str2[i2]-'0'+carry; carry=tmp/10; str3[j]=tmp%10+'0'; } while(i1>=0) { tmp=str1[i1--]-'0'+carry; carry=tmp/10; str3[j++]=tmp%10+'0'; } while(i2>=0) { tmp=str2[i2--]-'0'+carry; carry=tmp/10; str3[j++]=tmp%10+'0'; } if(carry) str3[j++]=carry+'0'; str3[j]='\0'; for(i=0,--j;i<j;++i,--j) { ch=str3[i]; str3[i]=str3[j]; str3[j]=ch; } } int main() { int n,c=0; char s1[205],s2[205],r[205]; scanf("%d",&n); while(n--) { if(c++) printf("\n"); s1[0]='0'; s1[1]='\0'; while(scanf("%s",s2),strcmp(s2,"0")) { Add(s1,s2,r); strcpy(s1,r); } puts(r); } return 0; }
C++解答
#include<stdio.h> #include<string.h> void Add(char *str1,char *str2,char *str3) { int i,j,i1,i2,tmp,carry; int len1=strlen(str1),len2=strlen(str2); char ch; i1=len1-1; i2=len2-1; j=carry=0; for(;i1>=0&&i2>=0;++j,--i1,--i2) { tmp=str1[i1]-'0'+str2[i2]-'0'+carry; carry=tmp/10; str3[j]=tmp%10+'0'; } while(i1>=0) { tmp=str1[i1--]-'0'+carry; carry=tmp/10; str3[j++]=tmp%10+'0'; } while(i2>=0) { tmp=str2[i2--]-'0'+carry; carry=tmp/10; str3[j++]=tmp%10+'0'; } if(carry) str3[j++]=carry+'0'; str3[j]='\0'; for(i=0,--j;i<j;++i,--j) { ch=str3[i]; str3[i]=str3[j]; str3[j]=ch; } } int main() { int n,c=0; char s1[205],s2[205],r[205]; scanf("%d",&n); while(n--) { if(c++) printf("\n"); s1[0]='0'; s1[1]='\0'; while(scanf("%s",s2),strcmp(s2,"0")) { Add(s1,s2,r); strcpy(s1,r); } puts(r); } return 0; }
Java解答
import java.math.BigInteger; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()) { int n=cin.nextInt(); while(n--!=0) { BigInteger b2=BigInteger.ZERO; BigInteger b1; while(true) { b1=cin.nextBigInteger(); if(b1.compareTo(BigInteger.ZERO)==0) { break; } b2=b2.add(b1); } System.out.print(b2); if(n>0) System.out.println("\n"); b1=BigInteger.ZERO; } } } }
Python解答
first = True for t in xrange(input()): ans = 0 while True: x = input() ans += x if x == 0: if not first: print '' first = False print ans break