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

高精度整数加法

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

等同于使用数组来保留运算结果


import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            StringBuffer sub1 = new StringBuffer(sc.nextLine()).reverse();// 为什么要逆序?因为从个位数开始计算,所以逆序结果比较好处理
            StringBuffer sub2 = new StringBuffer(sc.nextLine()).reverse();
            StringBuffer res = new StringBuffer();// 结果串
            int length = sub1.length() > sub2.length() ? sub1.length() : sub2.length();// 求出两串字符串的最大长度
            // 将两个字符串逆序
            for(int i = 0; i < 1000; i++){
                if(i >= sub1.length())
                    sub1.append('0');
                if(i >= sub2.length())
                    sub2.append('0');
                    // 将要进行计算的两个操作数后续的位数都补0
            }
            int bitNumber = 0;
            boolean flag = false;
            for(int i = 0; i < 1000; i++){
                // 设置一个标志,进1的标志
                if(i >= length && flag == false)// 运算已经进行到最后一位了,但是还没有进一,直接退出即可
                    break;
                else{
                    int temp;
                    if(flag == false)// 前一位没有进一
                        temp = Integer.valueOf(sub1.charAt(i) + "") + Integer.valueOf(sub2.charAt(i)+"");// 计算当前的结果
                    else // 有进一
                        temp = Integer.valueOf(sub1.charAt(i) + "") + Integer.valueOf(sub2.charAt(i)+"")+1;

                    // 判断是否给下一位进1
                    if(temp >= 10){
                        res.append(temp - 10);// 如果大于10,也就是要进1,将个位数保留到结果集
                        bitNumber++;// 这个是记录当前运算结果的位数的
                        flag = true;
                    }else{
                        // 没有进一
                        res.append(temp);// 直接添加当前的运算结果即可
                        bitNumber++;
                        flag = false;
                    }
                }
            }
            StringBuffer finalRes = new StringBuffer();
            for(int i = 0; i < bitNumber;i++){
                // 将结果添加到finalRes,如果不处理,后面的0也会成为结果
                finalRes.append(res.charAt(i));
            }
            // 逆序输出结果
            System.out.println(finalRes.reverse());
        }
    }
}

全部评论

相关推荐

01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
01-26 22:20
已编辑
门头沟学院 Java
Java抽象带篮子:项目很nb了,现在好好准备八股和算法吧,早点找实习,可以看看我的置顶帖子。帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务