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

高精度整数加法

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

题解:使用字符串模拟加法运算,从尾到头进行运算,并将结果保存在StringBuilder中,运算完之后需要反转。难点在于对进位的处理。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Scanner scanner = new Scanner(br);
        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();
        String result = getHighPrecisionIntAddition(str1,str2);
        System.out.println(result);
    }

    private static String getHighPrecisionIntAddition(String str1, String str2) {
        if (str1 == null || str1.length() == 0) return str2;
        if (str2 == null || str2.length() == 0) return str1;
        // 从尾到头计算低位的和
        int i = str1.length()-1,j = str2.length()-1;
        int carry = 0,sum;
        StringBuilder builder = new StringBuilder();
        while (i >= 0 || j >= 0){
            if (i >= 0 && j >= 0){
                sum = Integer.valueOf(str1.substring(i, i + 1)) + Integer.valueOf(str2.substring(j, j + 1));
                i--;
                j--;
            }else if (i >= 0 && j < 0){
                sum = Integer.valueOf(str1.substring(i, i + 1));
                i--;
            }else{
                sum = Integer.valueOf(str2.substring(j, j + 1));
                j--;
            }
            // 保存计算结果
            builder.append((sum + carry) % 10);
            // 处理进位
            if ((sum + carry) >= 10){
                carry = 1;
            }else
                carry = 0;
        }
        // 最终进位
        if (carry == 1)
            builder.append(carry);
        // 结果需要反转
        return builder.reverse().toString();
    }
}



#笔试刷题#
全部评论

相关推荐

05-28 23:26
河南大学 Java
双非本,刚学完Redis,项目只有外卖和点评,八股没准备,算法只有lqb省一,感觉敲的项目也是一言难尽没怎么吸收。怎么你们都有实习了
大牛之途:27急个锤子,你投日常实习最好的时间就是9,10月份,那时候暑期实习都结束了,正是缺人的时候。这份日常又能给你的暑期实习增加竞争力,暑期找的好了秋招也不怕了,都是环环相扣的
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务