题解 | #大数加法#

大数加法

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

import java.util.*;


public class Solution {
    /**
     * 总体思路,先相加,再统一进位,再输出结果;原生char运算;
     * String和Stringbuffer按下标获取、删除,减少外余代码量;
     * 逻辑简单,字符串不用反转,时间较短
     */
    public String solve (String s, String t) {
        // write code here
        return caculate(s,t);
    }
    public String caculate(String sn,String tn){
    
        int length = 1;
        if(sn.length()<tn.length()){
            length = tn.length()+1;//最大长度加1,为最高位相加进位准备
        }else{
            length = sn.length()+1;
        }
        char [] result = new char[length];
        int k = length-1;
        int i = sn.length()-1;
        int j = tn.length()-1;
        //先相加
        while(k>=0){
            int s = 0;
            //向前遍历,如果字符没加过,就取字符对应数值参与相加,否则取0
            if(i>=0){
            s = sn.charAt(i--) - '0';
            }
            int t = 0;
            if(j>=0){
            t = tn.charAt(j--) - '0';
            }
            int sum = s + t;
            result[k--] = (char)(sum + '0');//加'0'后才能转换为char,否则值为空
        }

       //在上面相加后再统一进位
       int index = length-1;
       while(index>0) {
        if(result[index]>=10){
            result[index-1] =(char)(result[index-1]-'0' + (result[index]-'0')/10 +'0');//index-1元素自身加上index元素进位的数
            result[index] = (char)((result[index]-'0')%10 + '0');//index元素自身取余为自身
        }
        index --;
       }   
       
       //输出结果
       StringBuffer resultNew = new StringBuffer(String.valueOf(result));//先转String再转StringBuffer
       if(result[0]!='0')   {//刚初始化时为'0',相加时有进位到0坐标元素这个点(最高位进位)
        return resultNew.toString();//char数组直接toString会为空,所以用StringBuffer
       } else{
        resultNew.deleteCharAt(0);//删除未被进位的0坐标元素
        return resultNew.toString();
       }
    }

}

全部评论

相关推荐

02-11 12:20
门头沟学院 Java
面试中的青提很胆小:我不信有比我们学校更逆天的,计算机专业就业第一位是我们学校二餐厅的打印店
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务