JAVA版 《大数乘法》

大数加法

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

思路:

先将两个字符串反转,然后对齐字符串的每一位,怎么个对齐法呢?就是反转后的字符串,短的字符串在最后面补0,补到和长字符串长度一样为止。然后再将字符串的每一位相加,相加时注意每一次都要加上进位数,进位数再前一位可以算出来,当每一位都加完的时候,此时需要一个判断,此时的进位数是否为0,如果不为0.则需要在最后的结果加上它,最后将结果反转回去然后再返回即可。

import java.util.*;
public class Solution {

    public String solve (String s, String t) {
        // write code here
        int ls = s.length();
        int lt = t.length();
        String s1 = reverse(s);
        String t1 = reverse(t);
        int maxLen = ls>lt ? ls:lt;

        if(ls > lt){
            for(int i = lt; i < ls; i++){
                t1 += "0";
            }
        }else{
            for(int i = ls; i < lt; i++){
                s1 += "0";
            }
        }

        StringBuffer res = new StringBuffer(); //存放返回结果
        int ans = 0;  //进位

        for(int i = 0; i < maxLen; i++){
            int sum = Integer.parseInt(s1.charAt(i)+"") + Integer.parseInt(t1.charAt(i)+"")+ans;
            res.append(sum%10);
            ans = sum/10;  //求出进位数
        }
        if(ans > 0){
            res.append(ans);
        }
        return reverse(new String(res));
    }


    //反转字符串
    public String reverse(String str){
        char[] chars = str.toCharArray();
        int l = 0, r = chars.length-1;
        while(l < r){
            char c = chars[l];
            chars[l] = chars[r];
            chars[r] = c;
            l++;
            r--;
        }
        return new String(chars);
    }
}






全部评论
你的太复杂了吧,看看我的 import java.util.*; public class Solution { public String solve (String s, String t) { if(s==null||"".equals(s))return t; if(t==null||"".equals(t))return s; int i=s.length()-1,j=t.length()-1; StringBuilder ans=new StringBuilder(); int c=0; while(i>=0||j>=0){ int c1=(i>=0?s.charAt(i)-'0':0); int c2=(j>=0?t.charAt(j)-'0':0); ans.append((c+c1+c2)%10); c=(c1+c2+c)/10; i--; j--; } if(c!=0) ans.append(c); ans.reverse(); return ans.toString(); } }
1 回复 分享
发布于 2021-03-13 12:57

相关推荐

13 4 评论
分享
牛客网
牛客企业服务