leetcode第一刷_Multiply Strings

2014-11-24 12:54:58 · 作者: · 浏览: 4

前面提到过很多次大整数的问题,这个是真正的大整数。

我用了一个很蠢得方法,先写一个大整数和一个个位数相乘的方法,返回的结果是一个string,然后写一个string相加的方法,每次循环,用其中一个数的每一位去乘另一个数,然后加到结果上。。

多么愚蠢的思路,居然还一遍过了。。一个更好的方法是先用两个int数组把两个string存一下,每位占数组中的一个数,然后再用一个int数组保存结果,每次也是用一个数的每一位去乘另一个数,结果直接加入到结果数组的对应位置,不考虑进位,最后再统一的计算进位。这种思路非常简单,应当用我一半的代码就能写完,而且不容易出错。一般也不会溢出,因为每次乘得到的数最大是81,要相加超过INT_MAX,string得非常长才行。

下面贴我自己的代码,供大家耻笑:

void reverse(string &s){
    int len = s.length();
    for(int i=0;i
  
   0){
            int t = (a[i]-'0') + c;
            res[i] = t%10+'0';
            c = t/10;
        }else{
            res[i] = a[i];
        }
        i++;
    }
    while(i
   
    0){ int t = (b[i]-'0') + c; res[i] = t%10+'0'; c = t/10; }else{ res[i] = b[i]; } i++; } return res; } string numPlus(string &a, int low, int bit){ int len = a.length(); string res(len+bit+1, '0'); int start = bit, i=0, c=0; while(i
    
     0) res[start] = c+'0'; return res; } class Solution { public: string multiply(string num1, string num2) { if(num1 == "") return num2; if(num2 == "") return num1; string res = "0"; reverse(num1); reverse(num2); for(int i=0;i