java 高精度加法

xiaoguo
思路:
第一步:把字符串一个一个切割好放进数组中
第二步:创建一个数组长度存放加和好的数据
第三步:找到最小的数的长度判断相加次数
第四步:逐位相加
第五步:将未相加的数放到all数组前边
第六步:判断r是否还有值,若有,放到最前边
第七步:判断最前边是不是0,如果是的话就去掉
第八步:倒序输出

代码:

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

public class precision {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String stra =sc.nextLine();
        String strb = sc.nextLine();
        int[] a = new int[stra.length()];
        int[] b = new int[strb.length()];
        //第一步:把字符串一个一个切割好放进数组中
        for (int i=0;i<stra.length();i++){
            //0的Ascll值是48
            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;
        }
        //第二步:创建一个数组长度存放加和好的数据
        int maxLength = stra.length()> strb.length() ? stra.length() : strb.length();
        //+1是为了怕两数相加超过最大的数的位数
        int[] all = new int[maxLength+1];
        //第三步:找到最小的数的长度判断相加次数
        int minLength = stra.length() < strb.length() ? stra.length() : strb.length();
        int r=0;
        //第四步:逐位相加
        for (int i=0;i<minLength;i++){
          int c = a[i]+b[i]+r;
          r = c/10;
          all[i]=c%10;
        }
        //第五步:将未相加的数放到all数组前边
        if(a.length>b.length){//如果a的位数比b多,则把a的数字放进c里面去
            for(int i=b.length;i<maxLength;i++){//从b.length开始操作
                int temp=a[i]+r;
                r=temp/10;
                all[i]=temp%10;
            }
        }else if(a.length<b.length){
            for(int i=a.length;i<maxLength;i++){//从b.length开始操作
                int temp=b[i]+r;
                r=temp/10;
                all[i]=temp%10;
            }
        }
        //第六步:判断r是否还有值,若有,放到最前边
        if(r!=0){
            all[all.length-1]+=r;
        }
        //第七步:判断最前边是不是0,如果是的话就去掉
        if(all[all.length-1]  == 0){
            //使用Arrays的静态方法copyOfRange(int[] original, int from, int to)。
            all = Arrays.copyOfRange(all,0,all.length-1);
        }
        //第八步:倒序输出
        for (int i=0;i<all.length;i++){
            System.out.print(all[all.length-1-i]);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值