JasonChang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

大数相乘, 按位算结果, 注意全0,注意进位

 1 public class Solution {
 2     public String multiply(String num1, String num2) {
 3         // IMPORTANT: Please reset any member data you declared, as
 4         // the same Solution instance will be reused for each test case.
 5         int length1 = num1.length();
 6         int length2 = num2.length();
 7         int[] result = new int[length1 + length2 + 1];
 8         int resultlength = length1 + length2 + 1;
 9         for(int i = 0; i < length1; i++)
10         {
11             int carry = 0;
12             int offset = resultlength - 1 - i;
13             for(int j = 0; j < length2; j++)
14             {
15                 int tmp1 = num1.charAt(length1 - 1 - i) - '0';
16                 int tmp2 = num2.charAt(length2 - 1 - j) - '0';
17                 int tmpresult = tmp1 * tmp2 + carry + result[offset - j];
18                 result[offset - j] = tmpresult % 10;
19                 carry = tmpresult / 10;
20             }
21             if(carry > 0)
22             {
23                 int tmp = result[offset - length2] + carry;
24                 result[offset - length2] = tmp % 10;
25                 result[offset - length2 - 1] = tmp / 10;
26             }
27         }
28         
29         StringBuilder myresult = new StringBuilder();
30         int i = 0;
31         while(i < resultlength && result[i] == 0)
32             i++;
33         if(i >= resultlength)
34             return "0";
35         while(i < resultlength)
36         {
37             myresult.append(String.valueOf(result[i]));
38             i++;
39         }
40         return myresult.toString();
41     }
42 }

 

posted on 2013-11-07 06:30  JasonChang  阅读(167)  评论(0编辑  收藏  举报