题解 | #大数加法#

大数加法

http://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

逆序,从低位相加

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */


    public String solve (String s, String t) {
        // write code here
        int length1 = s.length();
        int lenght2 = t.length();
        //特殊值处理
        if(length1 == 0){
            return t;
        }
        if(lenght2 == 0){
            return s;
        }
         
        int len = lenght2 - length1;
        int maxLen = lenght2;
        StringBuilder temp = new StringBuilder();
        //两个字符串长度不一致时,将较短的字符串用0在前面补齐
        if(len>0){//第2个字符串长
            for(int i=0;i<len;i++){
                temp.append("0");
            }
            s = temp + s;
            maxLen = lenght2;
        }else if(len<0){//第1个字符串长
            len = (-1)*len;
            for(int i=0;i<len;i++){
                temp.append("0");
            }
            t = temp + s;
            maxLen = length1;
        }
        //字符串相加:将两个字符串的每一位字符相加,如果相加大于9,则进位(使用second保存十进制位,first保存个位)。
        StringBuilder str = new StringBuilder();
        int second = 0;//十进制位
        int first = 0;//个位
        int num = 0;//中间变量,保存两个字符以及second相加的结果
        int x = 0;
        int y = 0;
        for(int i = maxLen-1;i>=0;i--){
            x = Integer.parseInt(s.charAt(i)+"");
            y = Integer.parseInt(t.charAt(i)+"");
            num = x + y + second;//使用十进制位
            second = 0;//使用十进制位后,十进制位置0
            if(num>9){//两个字符以及second相加大于或者等于10
                second = 1;//更新十进制位
                first = num-10;//更新个位
                str.append(first);//将字符相加结果添加到StringBuilder对象中
            }else{//两个字符以及second相加小于10
                str.append(num);//将字符相加结果添加到StringBuilder对象中
            }
        }
        //两个字符串的首位字符相加结果如果有进位,则添加字符“1”
        if(second==1){
            str.append("1");
        }
         
        return str.reverse().toString();//字符串翻转
    }
}
全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务