43.Multiply Strings

來源:互聯網
上載者:User

標籤:

    /*     * 43.Multiply Strings      * 2016-5-4 by Mingyang 很像一個乘除法的計算機     * 我的這種做法確實無可厚非,但是如果對於特殊的客戶,比如說無限大的數乘以無限大的數     * 那麼我就不能老老實實的乘了,會溢出。就可以把每一位存在一個數組裡面     * 利用前面做加減法的演算法,A[0]*B[0]=C[0]每一位對應的寫在C的對應位上,然後不斷地累積     */    //我的最最原始的解法    public static String multiply(String num1, String num2) {        if (num1.length() == 0 || num1 == null || num2.length() == 0|| num2 == null)            return "";        int len1 = num1.length();        int len2 = num2.length();        num1 = new StringBuffer(num1).reverse().toString();        num2 = new StringBuffer(num2).reverse().toString();        double res = 0;        String result = "";        for (int i = 0; i < len1; i++) {            int temp = 0;            int next = 0;            StringBuffer sb = new StringBuffer();            for (int j = 0; j < len2; j++) {                int n1 = num1.charAt(i) - ‘0‘;                int n2 = num2.charAt(j) - ‘0‘;                temp = next + n1 * n2;                next = temp / 10;                sb.append(temp % 10);            }            res = res + Integer.parseInt(sb.reverse().toString())* Math.pow(10.0, (double) i);        }        if (res > Integer.MAX_VALUE)            return "";        result = Double.toString(res);        return result;    }    //思路和2一樣了,自己的實現    public static String multiply1(String num1, String num2) {           int len1=num1.length();           int len2=num2.length();           if(num1==null||len1==0||num2==null||len2==0||num1.equals("0")||num2.equals("0"))              return "0";           char[] array1=num1.toCharArray();           char[] array2=num2.toCharArray();           int[] res=new int[len1+len2];           for(int i=len1-1;i>=0;i--){               for(int j=len2-1;j>=0;j--){                   int s=len1-1-i+len2-1-j;                   res[s]=res[s]+(array1[i]-‘0‘)*(array2[j]-‘0‘);                   if(res[s]>9){                       res[s+1]+=res[s]/10;                       res[s]=res[s]%10;                   }                                  }           }           StringBuffer sb=new StringBuffer();           for(int i=0;i<res.length-1;i++){               sb.append(res[i]);           }           //這裡不要忘了,因為不好估計C的位元,多出的一位是0的時候需要去掉不加           if(res[res.length-1]!=0)               sb.append(res[res.length-1]);           sb.reverse();           return sb.toString();                   }    //網上的解法,比如你的i位我的j位,我們乘在一起以後就是i+j位的數組裡面,這樣就比較好一點    //比我好的地方就是把string reverse了一下,便於計算    public static String multiply2(String num1, String num2) {        num1 = new StringBuilder(num1).reverse().toString();        num2 = new StringBuilder(num2).reverse().toString();        // even 99 * 99 is < 10000, so maximaly 4 digits        int[] d = new int[num1.length() + num2.length()];        for (int i = 0; i < num1.length(); i++) {            int a = num1.charAt(i) - ‘0‘;            for (int j = 0; j < num2.length(); j++) {                int b = num2.charAt(j) - ‘0‘;                d[i + j] += a * b;            }        }        StringBuilder sb = new StringBuilder();        for (int i = 0; i < d.length; i++) {            int digit = d[i] % 10;            int carry = d[i] / 10;            sb.insert(0, digit);            // 這一步很關鍵,因為會出邊界,就是最後進的那一位            if (i < d.length - 1)                d[i + 1] += carry;        }        // trim starting zeros        while (sb.length() > 0 && sb.charAt(0) == ‘0‘) {            sb.deleteCharAt(0);        }        return sb.length() == 0 ? "0" : sb.toString();    }

 

43.Multiply Strings

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.