大数加法,大数乘法java版(高频面试题)

大数加法

public class Add {
    public static String addStrings(String num1, String num2){
        int len1=num1.length()-1,len2=num2.length()-1;
        StringBuilder sb=new StringBuilder();
        int carry=0;
        while(len1>=0||len2>=0||carry!=0){
            int a=len1>=0?num1.charAt(len1)-'0':0;
            int b=len2>=0?num2.charAt(len2)-'0':0;
            int sum=carry+a+b;
            sb.append(sum%10);
            carry=carry/10;
            len1--;
            len2--;
        }
        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        String s = addStrings("0", "0");
        System.out.println(s);
    }
}

大数乘法

主要思想:AB*CD=A*C (A*D+B*C) B*D,

如:53*34=15 (29) 12 三个位置的数从后向前完成进位,12即2 进1,29+1=30即0进3,3+15=18即8进1,得1802。

public static String multiply(String s1,String s2){
        if(s1=="0"||s2=="0") return "0";
        int len=s1.length()+s2.length();
        int[] tmp=new int[len];

        for(int i=0;i<s1.length();i++){
            for(int j=0;j<s2.length();j++){
                tmp[i+j+1]+=(s1.charAt(i)-'0')*(s2.charAt(j)-'0');
            }
        }
        int carry=0;
        for(int i=len-1;i>=0;i--){
            int sum=carry+tmp[i];
            tmp[i]=sum%10;
            carry=sum/10;
        }
        int index=0;
        StringBuilder sb=new StringBuilder();
        while(index<len&&tmp[index]==0) index++;
        for(int i=index;i<len;i++) sb.append(tmp[i]);
        return sb.toString();
    }
    public static void main(String[] args) {
        String multiply = multiply("0", "0");
        System.out.println(multiply);
    }

全部评论
m大数加乘法
点赞 回复 分享
发布于 04-21 22:24 浙江

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务