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

高精度整数加法

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

import java.util.Scanner;

// 注意类名必须为 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.next();
            String b = in.next();
            StringBuilder sba=new StringBuilder(a);
            a=sba.reverse().toString(); //翻转,把个位数放在左侧,两个字符串只用一个下标,便于遍历
            StringBuilder sbb=new StringBuilder(b);
            b=sbb.reverse().toString();//翻转,把个位数放在左侧,两个字符串只用一个下标,便于遍历
            int n1 = a.length();
            int n2 = b.length();
            int n=Math.min(n1,n2);
            int ln=Math.max(n1,n2);
            String longStr;
            if(n1>n2){
                longStr=a;
            }else{
                longStr=b;
            }
            StringBuilder sb=new StringBuilder();//创建一个sb,用于记录计算结果
            int index=0; //遍历的位置下标
            int val1=0; //每次从长字符串中取的数字
            int val2=0; //每次从短字符串中取得数字
            int val=0; //每次两数字相加的和
            while(val>=10 || index<=n-1){ 
                val1=0; //将上次的取值归零
                val2=0;//将上次的取值归零
                val/=10;//对上次的和取高位 数值为0或者1
                if(index<=n1-1)val1=a.charAt(index)-'0';
                if(index<=n2-1)val2=b.charAt(index)-'0';
                val=val1+val2+val;
                int temp=val%10; //当前这一位的数字
                String strnow=Integer.toString(temp);
                sb.append(strnow); //录入到sb中
                index++; 
            }
            String str1=index<=ln-1?longStr.substring(index):""; 
		  //取出较长字符串中剩余的,注意index可能已经大于n-1了
            sb.append(str1); //把长字符串中剩余的夹在右边,注意此时结果仍然是反着的
            String des=sb.reverse().toString(); //转回来
            System.out.print(des);
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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