1066 - 大大的求和

通过次数

0

提交次数

0

时间限制 : 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