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

高精度整数加法

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

描述
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。
输入描述:
输入两个字符串。保证字符串只含有'0'~'9'字符
输出描述:
输出求和后的结果
示例1
输入:
9876543210
1234567890
输出:
11111111100
解法: 类似一个小型的加法运算, 先固定长串,短串,一个个取出来,从末尾数字相加,取一个中间值,需要进位的话,中间值flag就加1
要注意考虑两个串相等的情况,已经两个串长度不相等另一个长串还是需要继续加完

import java.util.*;
public class Main {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()){
                String s1 = sc.next();
                String s2 = sc.next();
                String s3 = s1.length()>=s2.length()?s1:s2;
                String s4 = s2.length()<=s1.length()?s2:s1;
                int flag =0;
                StringBuffer sb  = new StringBuffer();
                int i=s3.length()-1;
                int j=s4.length()-1;
                for(;i>=0 && j>=0;i--,j--){
                    int a = Character.getNumericValue(s3.charAt(i));
                    int b = Character.getNumericValue(s4.charAt(j));
                    int sum= a+b+flag;
                    if(sum<10){
                        sb.insert(0,String.valueOf(sum));//插在头
                        flag=0;
                    }else{
                        sb.insert(0,String.valueOf(sum%10));//插在头
                        flag=1;
                    }
                }
                //如果串长度相等,且最后相加大于10,那flag=1,需要再最前面进一位
                if (flag == 1 && i < 0) {
                    sb.insert(0,String.valueOf(1));
                }
                //如果串长度不相等,那长串还需要再相加,已经固定长串是s3
                for(;i>=0;i--){
                    int a = Character.getNumericValue(s3.charAt(i));
                    int sum= a+flag;
                    if(sum<10){
                        sb.insert(0,String.valueOf(sum));//插在头
                        flag=0;
                    }else{
                        sb.insert(0,String.valueOf(sum%10));//插在头
                        flag=1;
                    }
                }
                System.out.println(sb.toString());
            }
        }
}
全部评论

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务