1 , 使用java解决
直接调用java提供的大数处理的类就行了。最后直接用System.out.println()输出。
import java.math.BigInteger;
import java.util.Scanner;
public class zoj_1292
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
BigInteger a=BigInteger.valueOf(0);
BigInteger b=BigInteger.valueOf(0);
while(sc.hasNext())
{
int n;
n = sc.nextInt();
for(int i=0;i<n;i++)
{ if(i!=0) System.out.println();
while(true)
{
a=sc.nextBigInteger();
if(a.compareTo(BigInteger.valueOf(0))==0) break;
b=b.add(a);
}
System.out.println(b);
}
}
}
}
2, 整体思路,由于读入的大数的位数都一样,所以可以使读入的每一个大数的相同位相加。最后再考虑进位。整体思路是对的。。而且在vc上也是对的,但是wa。。受不鸟
这里对c++输入输出不太了解的可以看看这个 http://see.xidian.edu.cn/cpp/biancheng/view/116.html
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[100];
int res[105]={0};
int main()
{
int n ,i ,j;
int length;
cin>>n;
getchar();
for(i=0;i<n;i++)
{
while(1)
{
scanf("%s" ,a);
length=strlen(a);
if(length==1&&a[0]=='0')
{
break;
}
else
{
for(i=0;i<length;i++)
{
res[i]+=a[length-1-i]-'0';
}
}
}
//进位
for(i=0;i<105;i++)
{
res[i+1]+=res[i]/10;
res[i]=res[i]%10;
}
//输出
for(i=105;i>0;i--)
{
if(res[i]!=0)
{
for(j=i;j>=0;j--)
cout<<res[j];
cout<<endl;//表示输出一个回车,并flash缓冲区。
break;
}
}
if(i!=n-1)
cout<<endl;
}
}