43. 字符串相乘

package leetcode;

public class demo_43 {
    public String multiply(String num1, String num2) {
        String s1="";
        String s="";
        if(num2.equals("0")||num1.equals("0")) {return s="0";}
        
        //记录当前记录的次数
        int n=0;
        for(int i=num2.length()-1;i>=0;i--) {
            s1=Singlemul(num1, num2.charAt(i));
            s=addnumber(s, s1,n);
            n=n+1;
        }
        //之前的操作都是从左往右运算,现在要翻转过来
        StringBuffer sb=new StringBuffer(s);
        sb.reverse();
        s=sb.toString();
        System.out.println(s);
        return s;
    }
    //一位数字乘以多位数
    public String Singlemul(String num,Character c) {
        String s="";
        int add=0;
        int mul;
        for(int i=num.length()-1;i>=0;i--) {
            mul=(Integer.valueOf(c)-48)*(Integer.valueOf(num.charAt(i))-48)+add;
            if(mul>=10) {
                add=mul/10;
            }
            else {
                add=0;
            }
            s=s+mul%10;
        }
        if(add!=0) {
            s=s+add;
        }
        return s;
    }
    
    //将两个多位数进行相加
    public String addnumber(String s1,String s2,int n) {
        String s="";
        int add=0;
        for(int i=0;i<n;i++) {
            s=s+s1.charAt(i);
        }
        int num;
        int i;
        int j;
        //当进行n次相加时,加数起始位置是在被加数的第n位
        for(i=n,j=0;i<s1.length()&&j<s2.length();i++,j++) {
            num=(Integer.valueOf(s1.charAt(i))-48)+(Integer.valueOf(s2.charAt(j))-48)+add;
            if(num>=10) {
                add=num/10;
            }
            else {
                add=0;
            }
            s=s+num%10;
        }
        for(;j<s2.length();j++) {
            num=(Integer.valueOf(s2.charAt(j))-48)+add;
            if(num>=10) {
                add=num/10;
            }
            else {
                add=0;
            }
            s=s+num%10;
        }
        if(add==1) {
            s=s+1;
        }
        return s;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_43 d43 =new demo_43();
        d43.multiply("123", "456");
    }

}

 

上一篇:43. 使用多进程


下一篇:剑指 Offer 43. 1~n 整数中 1 出现的次数