大数求和

给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B;


输入:  

因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。

 
输出:  

以字符串形式,输出一行,表示A和B的和。

 
样例输入:
11111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222
                   
样例输出:
33333333333333333333333333333333333333333333333333

思路上应该不难,做的时候得注意很多细节,先上程序

import java.util.*;
public class Huawei {
	
	
		public static void main(String args[]){
			Scanner n = new Scanner(System.in);
			
			String a="";
			String b="";
			
			//读取控制台输入字符串
			 a=n.nextLine();
			 b=n.nextLine();
			 
//			System.out.println(a);
//			System.out.println(b);	
			 
			//获取字符串a,b的长度
			int aLength=a.length();
			int bLength=b.length();
			//定义最终结果字符串长度
			int length=0;
			
			//最终字符串的长度是a,b中较长字符串长度+1
			if(aLength>=bLength){				
				length=aLength+1;
				
			}else {
				length=bLength+1;
			}
			
			//先将结果放到整形数组中,然后再转换
			int[] resultc = new int[length];
			
			int c=0;
			
			int bb=0;
			int aa=0;
			while(length>1){
				aa=0;bb=0;
				
				//这里因为不确定a,b字符串哪个比较短,所以在某一个字符串加完的情况下自动用0代替。相当于将两个字符串都看作为较长字符串的长度,不够位用0补齐
				if(bLength>0){					
					bb=Integer.valueOf(b.charAt(bLength-1)+"");					
				}
				if(aLength>0){					
					aa=Integer.valueOf(a.charAt(aLength-1)+"");					
				}
				
				//System.out.println("aa----"+aa+"     bb-----"+bb);
				c=aa+bb;
				//计算出了进位后的数,再加上它前面数的进位
				resultc[length-1]+=c%10;
				//进位值
				resultc[length-2]=c/10;
				
				length--;
				aLength--;
				bLength--;								
			}
			String result="";
			
			//如果结果数组的0位置的值是0,得判断舍弃
			int i =0;
			if(resultc[0]==0){
				
				i=1;
				
			}
			for(;i<resultc.length;i++){
				
				result+=resultc[i];
				
			}
			
			System.out.println(result);
			
		}
		
		
}
注意点:

  1. 在两个字符串按位相加的时候,得考虑到某一个字符串先加完,然后用0补齐
  2. 字符串某一位字符转int型的时候应该是这样:
    Integer.valueOf(a.charAt(aLength-1)+"");写成<pre name="code" class="java" style="font-size: 14px;">Integer.valueOf(a.charAt(aLength-1));就完全是两种答案,因为chartAt函数返回的是一个char类型,得把他变成String类型才能正确的转换
     
  3. 最后,结果数组的0位有可能是1也有可能是0,转成字符串的时候应该做处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值