超长正整数相加

一、题目

请设计一个算法完成两个超长正整数的加法。

二、思路

没有想到什么好的思路,就是让两个数进行相加,有进位就把进位也算上。当然也可以使用大数操作,参考BigInteger类就可以处理。核心API考察,如果API限制,可以考虑 采用字符串解析处理

三、代码

import java.util.Scanner;

public class Solution {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
    
    
        	// 输入加数
            String addend = scanner.next();
            // 输入被加数
            String augend = scanner.next();
            // 输出结果
            System.out.println(AddLongInteger(addend,augend));
        }
    }
    /*
        算法:完成两个超长正整数的加法
     */
    public static String AddLongInteger(String addend, String augend) {
    
    
        // 结果
        StringBuilder res = new StringBuilder();
        // 将加数和被加数进行反转
        StringBuilder add = new StringBuilder(addend).reverse();
        StringBuilder aug = new StringBuilder(augend).reverse();
        // 求出长度
        int addLength = add.length();
        int augLength = aug.length();
        int maxLen = Math.max(addLength, augLength);
        // 用 0 补全字符串使得一样长
        while (addLength <= maxLen) {
    
    
            add.append('0');
            addLength++;
        }
        while (augLength <= maxLen) {
    
    
            aug.append('0');
            augLength++;
        }
        // 进位
        int carryBit = 0;
        // 当前位
        int current = 0;
        for (int i = 0; i < maxLen; i++) {
    
    
            int ad = add.charAt(i) - '0';
            int au = aug.charAt(i) - '0';
            int sum = ad + au + carryBit;
            current = sum >= 10 ? sum - 10 : sum;
            carryBit = sum / 10;
            res.append(current);
        }
        // 如果遍历完了字符产,进位不为0,就说明最后还得再进一位
        if (carryBit != 0) {
    
    
            res.append(1);
        }
        return res.reverse().toString();
    }
}
import java.math.BigInteger;
import java.util.Scanner;

public class Solution {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
    
    
            String addend = scanner.next();
            String augend = scanner.next();
            BigInteger num1 = new BigInteger(addend);
            BigInteger num2 = new BigInteger(augend);
            System.out.println(num1.add(num2));
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44002167/article/details/106838840