poj 1503 高精度加法
2013-09-07 10:26
351 查看
把输入的数加起来,输入0表示结束。
先看我Java代码,用BigINteger类很多东西都不需要考虑,比如前导0什么的,很方便。不过java效率低点,平均用时600ms,C/C++可以0ms过。
下面是我从网上找的C++代码,无外乎就是用数组模拟实现大数的加法。
先看我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 ,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 ; 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; }
相关文章推荐
- poj 1503 高精度加法
- POJ 1503 Integer Inquiry 高精度加法
- POJ 1503(高精度整数加法) 解题报告
- POJ 1503(高精度整数加法) 解题报告
- poj 1503 大整数高精度 加法
- 【原】 POJ 1503 Integer Inquiry 大整数加法 解题报告
- POJ 2602|URAL 1048|Superlong Sums|高精度加法
- 【大数加法】POJ-1503、NYOJ-103
- (高精度运算4.7.23)POJ 1503 Integer Inquiry(大数累加)
- POJ--1503:Integer Inquiry 大数加法
- POJ 3181 Dollar Dayz(完全背包+简单高精度加法)
- POJ 2845 01000001 二进制加法 套用高精度加法运算代码
- POJ 1503 Integer Inquiry(高精度运算)
- POJ 2845 01000001 二进制加法 套用高精度加法运算代码
- poj 2413 高精度加法,裴波拉契,判断范围
- Dollar Dayz POJ - 3181 dp,完全背包,简单高精度加法
- poj 1503 Integer Inquiry高精度
- poj-1001-1405-1503-高精度问题
- POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)
- POJ-1503-Integer Inquiry-大数加法