南邮ACM 1011 大数加法 JAVA解法

来源:互联网 发布:python量化交易代码 编辑:程序博客网 时间:2024/05/16 17:53

大数加法

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:2107            测试通过:547

描述

求两个非负整数(1000位以内)的和。

输入

两个非负整数(1000位以内),以空格分隔。

输出

两个非负整数的和。

样例输入

111111111111 222222222222

样例输出

333333333333

提示

 

题目来源

GUOJ


主函数体:

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String a = sc.next();String b = sc.next();fun(a, b);}



方法1: 使用java api对于大数处理的类 BigInteger

private static void fun(String a, String b) {BigInteger aa=new BigInteger(a);BigInteger bb=new BigInteger(b);System.out.println(aa.add(bb));}

方法2: 传统方法,用数组模拟计算和进位。先把两个字符串转化为两个长度相同的数组,对于长队较小的数组,在它的前面进行加0操作。

private static void fun1(String a, String b) {int aLength=a.length();int bLength=b.length();int length=aLength>bLength?aLength:bLength;int diff=Math.abs(aLength-bLength);int[] aArray=new int[1000];int[] bArray=new int[1000];int[] resultArray=new int[1000];if(aLength>bLength){//<span style="color: rgb(85, 85, 85); font-family: Arial; font-size: 14px; line-height: 26px;">先把两个字符串转化为两个长度相同的数组,对于长队较小的数组,在它的前面进行加0操作。</span>for(int i=0;i<length;i++){aArray[i]=Integer.valueOf(a.charAt(i)+"");if(i<diff){bArray[i]=0;}else{bArray[i]=Integer.valueOf(b.charAt(i-diff)+"");}}}else{for(int i=0;i<length;i++){bArray[i]=Integer.valueOf(b.charAt(i)+"");if(i<diff){aArray[i]=0;}else{aArray[i]=Integer.valueOf(a.charAt(i-diff)+"");}}}int jinwei=0;for(int i=length-1;i>=0;i--){int temp=aArray[i]+bArray[i]+jinwei;if(temp>=10){jinwei=1;}else{jinwei=0;}resultArray[i]=temp%10;}if(jinwei==1){System.out.print(1);}for(int i=0;i<length;i++){System.out.print(resultArray[i]);}}



0 0