0
点赞
收藏
分享

微信扫一扫

蓝桥 高精度加法(Java)

鱼板番茄 2022-03-11 阅读 73

AILAB免费训练

【问题描述】

输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

【算法描述】

由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
  定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
  计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
  最后将C输出即可。

【输入格式】

输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。

【输出格式】

输出一行,表示a + b的值。

【样例输入】

20100122201001221234567890
2010012220100122

【样例输出】

20100122203011233454668012

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	static Scanner sc=new Scanner(System.in);
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String stra,strb=new String();// 声明2个String对象来装在2个加数a,b
		stra=sc.nextLine();
		strb=sc.nextLine();
		int[] a=new int[stra.length()];
		int[] b=new int[strb.length()];
		 // 根据题目意思,A[0]装a的个位,A[1]装a的十位……所以需要将字符串进行反转(因为个位在字符串末尾)
		for(int i=0;i<stra.length();i++){
			a[a.length-1-i]=(stra.charAt(i)-48);
		}
		for(int i=0;i<strb.length();i++){
			b[b.length-1-i]=(strb.charAt(i)-48);
		}
		// 下面就应该进行加法运算了 ,对于结果C的长度,应该是2个加数的最大位数+1。
		int maxLen=a.length > b.length ?a.length : b.length;
		int[] c=new int[maxLen+1];
		//用来规定2个数加法的次数
		int minLen=a.length < b.length ?a.length : b.length;
		
		int r=0;//用来保存整数部分
		for(int i=0;i<minLen;i++){
			int temp=a[i]+b[i]+r;//进行加法
			r=temp/10;//十位数的保存,保存进位
			c[i]=temp%10;//保存个位
		}
		if(a.length>b.length){//如果a的位数比b多,则把a的数字放进c里面去
			for(int i=b.length;i<maxLen;i++){//从b.length开始操作
				int temp=a[i]+r;
				r=temp/10;
				c[i]=temp%10;
			}
		}else if(a.length<b.length){
			for(int i=a.length;i<maxLen;i++){//从b.length开始操作
				int temp=b[i]+r;
				r=temp/10;
				c[i]=temp%10;
			}
		}
		if(r!=0){//如果r还有值的话,就讲r加在最高为上
			c[c.length-1]+=r;
		}
		//判断一下最高位是否为0,如果为0就把0给去掉
		if(c[c.length-1]==0){
			c=Arrays.copyOfRange(c, 0, c.length-1);//从original数组的下标from开始复制,到下标to结束
		}
		for(int i=0;i<c.length;i++){
			System.out.print(c[c.length-1-i]);//逆向输出,输出数值
		}
	}
}
举报

相关推荐

0 条评论