Algorithm 字符串运算(加法/乘法)

public String addBinary(String a, String b,int radix) {
        int carry = 0; StringBuilder sb = new StringBuilder();
        int index = 1;
        for(index = 1;index <= a.length() && index<=b.length() ;index++){
            char cha = a.charAt(a.length()-index);
            char chb = b.charAt(b.length()-index);
            int ans = cha + chb - 2* '0' + carry;
            carry = ans /radix; sb.append(ans%radix);
        }
       for(int i=index;i<=a.length();i++){
            char cha = a.charAt(a.length()-i);
            int ans = cha - '0' + carry;
            carry = ans /radix; sb.append(ans%radix);
        }
        for(int i=index;i<=b.length();i++){
            char chb = b.charAt(b.length()-i);
            int ans = chb - '0' + carry;
            carry = ans /radix; sb.append(ans%radix);
        }
        if(carry != 0) sb.append(carry);
        return sb.reverse().toString();
    }
    
    public String multiply(String num1, String num2) {
        String ans = "0";
        for(int i=num2.length()-1;i>=0;i--){
            StringBuilder sbi = multiply(num1,num2.charAt(i));
            for(int j=num2.length()-1;j>i;j--) //乘法补位
                sbi.append('0');
            ans = addBinary(ans,sbi.toString(),10);
        }
        int ind0 = 0;
        //去除前置无效0
        while(ans.charAt(ind0) == '0' && ind0 < ans.length()-1 ) 
            ind0++;
        return ans.substring(ind0);
    }
    
    public StringBuilder multiply(String num1, char num2) {
       StringBuilder sb = new StringBuilder();
       int carry = 0;
       for(int i=num1.length()-1;i>=0;i--){
           int ans = (num1.charAt(i) - '0') * (num2 - '0') + carry;
           carry = ans/10;
           sb.append(ans%10);
       }
       if(carry != 0) sb.append(carry); 
       return sb.reverse();
    }

 

posted @ 2015-10-04 22:18  √珞珈搬砖工√  阅读(120)  评论(0)    收藏  举报