蓝桥杯基础练习:高精度加法

import java.util.*;
public class test1 {
    public static void main(String[] args) {
        Scanner sc =  new Scanner(System.in);
        int[] a = new int[100];
        int[] b = new int[100];
        int[] c = new int[100];
        int r = 0;

        System.out.println("请输入a");
        String strA = sc.nextLine();
        for(int i = 0; i < strToChar(strA).length; i++) {
            // 经过下面的方法翻转的数组到这里会a变成   ……0000000001234
            a[a.length - 1 - i] = Integer.parseInt(strToChar(strA)[i] + "");
        }
        System.out.println();
        System.out.println("请输入b");
        String strB = sc.nextLine();
        for(int i = 0; i < strToChar(strB).length; i++) {
            // 经过下面的方法翻转的数组到这里会a变成   ……000000000123
            b[b.length - 1 - i] = Integer.parseInt(strToChar(strB)[i] + "");
        }
        /*
        相加  0001234
             0000123
             0001357
         */
        for(int i = c.length-1; i >= 0; i--) {
            c[i] = a[i] + b[i] + r;
            int s = c[i];
            if(c[i]/10 != 0) {
                r = c[i] / 10;
                c[i] = c[i]%10;
            }else {
                r = 0;
            }
        }
        boolean flag = false;
        for (int i = 0; i < c.length; i++) {
            // 0001357   1是最高位不可能为零,所以当遇到c[i]不为零时,余下的数就可以输出了
            if(c[i] != 0){
                flag = true;
            }
            if(flag){
                System.out.print(c[i]);
            }
        }
        sc.close();
    }

    /**
     * 将字符串转换为字符数组并且翻转
     * 为什么要翻转呢?
     * 1、输入a: 1234  经过翻转:  4321
     * 2、输入b:123   经过翻转: 321
     * 这样高位就不会和低位相加
     * @param str
     * @return
     */
    public static char[] strToChar(String str) {
        char[] ch = str.toCharArray();
        for(int i = 0; i < ch.length/2; i++) {
            char temp = ch[i];
            ch[i] = ch[ch.length-1-i];
            ch[ch.length-1-i] = temp;
        }
        return ch;
    }
}

转载自其他博主

import java.math.BigDecimal;
import java.util.Scanner;

public class 高精度算法1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigDecimal aBigDecimal;
		BigDecimal bigDecimal;
		BigDecimal cBigDecimal;
		Scanner sc=new Scanner(System.in);
		aBigDecimal=sc.nextBigDecimal();
		bigDecimal=sc.nextBigDecimal();
		cBigDecimal=aBigDecimal.add(bigDecimal);
		System.out.println(cBigDecimal);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值