poj 1503 高精度加法

简介: 把输入的数加起来,输入0表示结束。先看我Java代码,用BigINteger类很多东西都不需要考虑,比如前导0什么的,很方便。不过java效率低点,平均用时600ms,C/C++可以0ms过。

把输入的数加起来,输入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;
}
目录
相关文章
|
6月前
|
机器学习/深度学习
N皇后问题(HDU—2253)
N皇后问题(HDU—2253)
|
6月前
螺旋矩阵~
螺旋矩阵~
poj 1990 MooFest 树状数组
题意就是有N头牛,每头牛都有一个坐标和声调值(x, v),两头牛之间通讯要花费的能量是他们的距离乘以最大的一个音调值,现在要任意两头牛之间都相互通讯一次,求总共需要花费多少能量?
48 0
Leecode 18. 四数之和
Leecode 18. 四数之和
50 0
|
Java
「日更刷题」59.螺旋矩阵
「日更刷题」59.螺旋矩阵
74 0
|
人工智能 BI 存储
|
人工智能 网络架构