题解 | #高精度整数加法#

高精度整数加法

https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6

两个值相加的值n超过10则需要加1

下次循环拿到sb排在最前面的字符串。如果拿不到就定义为0。拿到后先将最首位值直接删除(首位拿出来后需要计算,计算后直接作为结果存入)

首位拿到的值需要和n累加,累加后的值为m。

如果m>=10.则需要先存个位数值,并首位写成1.

m<10。直接存入

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            String b = in.nextLine();
            // 比较两个字符串之间的长度大小
            int i=1;
            StringBuilder sb =new StringBuilder();
            while (a.length()>=i || b.length()>=i) {
                // 从末尾开始计算
                int c1 = i<=a.length()? Integer.parseInt(a.charAt(a.length()-i)+""):0;
                int c2 = i<=b.length()? Integer.parseInt(b.charAt(b.length()-i)+""):0;
                int m = c1+c2;
                // 定义排在首位值
                int firstLetter = 0;
            // 只有当前面一次计算,两个数字相加超过大于=10的时候,才会数字进一,导致再次进入时i的长度和sb的长度相等
                // 否则sb永远比i小1位
                if (sb.length()==i) {
                    firstLetter = Integer.parseInt(sb.charAt(i-1)+"");
                    sb.replace(sb.length()-1,sb.length(),""); 
                }
                m = firstLetter+m;
                if (m>=10) {
                    m=m-10;
                    // sb需要先把最大字符串删除,再append。
                    sb.append(m).append(1);
                } else {
                    sb.append(m);
                }
                i++;
            }
            System.out.println(sb.reverse().toString());
        }
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务