文章标题

这题我写的有点复杂了

public class Solution {
     public String multiply(String num1, String num2) {
        int len2 = num2.length();

        int jinwei=0;

        String jia2 = "";

        String result = mul(num1,num2.charAt(num2.length()-1));
        for (int i=len2-2;i>=0;i--){
            jia2 = mul(num1,num2.charAt(i));
            for (int j=len2-1;j>i;j--){
                jia2=jia2+'0';//这个就是乘法运算的算法。。小学学的
            }
            result  = add(result,jia2);
        }
        int flag=0;
        for (int i=0;i<result.length();i++){
            if(result.charAt(i)=='0')flag++;
        }
        if(flag == result.length())return "0";
        return result;
    }
    private String mul(String num1,char num){//单个数乘以一串数
        StringBuffer stringBuffer= new StringBuffer();
        int jinwei =0;
        int gewei = 0;
        int number =0;
        int numm = num-'0';
        for (int i = num1.length()-1;i>=0;i--){
            number = (int) ((num1.charAt(i)-'0')*numm)+jinwei;
            jinwei = number/10;//进位
            gewei = number - jinwei*10;//相乘之后的各位
            stringBuffer.append(gewei);
            if (i==0){
                if (jinwei!=0)stringBuffer.append(jinwei);

            }
        }
        return stringBuffer.reverse().toString();
    }
    public String add(String num1,String num2){// String相加如301+10需要倒一下,变成103+01=113;得到的结果在倒一下变成311

        int gewei = 0;
        StringBuffer stringBuffer1 = new StringBuffer();
        StringBuffer stringBuffer2 = new StringBuffer();
        StringBuffer stringBuffer = new StringBuffer();
        String num11 = stringBuffer1.append(num1).reverse().toString();
        String num22 = stringBuffer2.append(num2).reverse().toString();
        int len = Math.max(num11.length(),num22.length());
        int jinwei = 0;
        int sum = 0;
        int result = 0;
        for (int i=0;i<len;i++){
            if (num11.length()<=i){
                sum = num22.charAt(i)-'0'+jinwei;
            }else if(num2.length()<=i){
                sum  = num11.charAt(i)-'0'+jinwei;
            }else {
                sum = num11.charAt(i) -'0' + num22.charAt(i) -'0' + jinwei;

            }

            jinwei  = sum/10;
            gewei = sum - jinwei*10;
            stringBuffer.append(gewei);
            if (i==len-1){
                if (jinwei!=0)stringBuffer.append(jinwei);
            }
        }
        return  stringBuffer.reverse().toString();
    }

}

再贴一个看到的比较简单的做法,得学习学习

public String multiply(String left, String right) {
        if(left.equals("0") || right.equals("0"))
            return "0";

        // use p to accumulate sum of prod.    
        int[] p = new int[left.length() + right.length()] ;
        left = new StringBuilder(left).reverse().toString();
        right = new StringBuilder(right).reverse().toString();

        for(int i =0; i < left.length(); i ++){
            for(int j =0; j < right.length(); j ++){
                int val = (left.charAt(i) -'0') * (right.charAt(j) -'0');
                p[i+j] += val;
            }
        }

        // convet p into string
        int carry =0;    
        StringBuilder sb = new StringBuilder();

        for(int v: p){
            v += carry;
            carry = v/10;
            v %= 10;

            sb.append(v);
        }

        if(carry > 0 )
            throw new RuntimeException("wrong code");

        String ret = sb.reverse().toString();
        return ret.charAt(0) == '0' ? ret.substring(1) : ret;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值