把输入的数加起来,输入0表示结束。
先看我Java代码,用BigINteger类很多东西都不需要考虑,比如前导0什么的,很方便。不过java效率低点,平均用时600ms,C/C++可以0ms过。
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); BigInteger sum = BigInteger.valueOf(0); BigInteger a; a = cin.nextBigInteger(); while (true) { sum = sum.add(a); if (a.compareTo(BigInteger.valueOf(0)) == 0) break; a = cin.nextBigInteger(); } System.out.println(sum); cin.close(); } }
下面是我从网上找的C++代码,无外乎就是用数组模拟实现大数的加法。
#include<stdio.h> #include<string.h> #define N 20000 int ans[N],f,max; void hadd(char a[]) { f=0; int n=strlen(a); for(int i=n-1;i>=0;i--) { a[i]-='0'; ans[f]+=a[i]; ans[f+1]+=ans[f]/10; ans[f]%=10; f++; if(max<f) max=f; } } int main() { memset(ans,0,sizeof(ans)); while(1) { char s[N]; scanf("%s",s); if(strlen(s)==1&&s[0]=='0') break; hadd(s); } int flag=0; for(int i=N-1;i>=0;i--) { if((!flag&&ans[i]!=0)||flag||(!flag&&i==0)) {printf("%d",ans[i]);flag|=1;} } puts(""); return 0; }