Multiply Strings

Q:

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

A: 用字符串模拟数字相乘。

keyPoints:1.先把字符串转换成int数组,再对位相乘。

2.将int数组转换成字符串。

注意:这里字符串第0位表示的应是数字的高位,所以最后需要将字符串reverse一下

    string multiply(string num1, string num2) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(num1.empty()||num2.empty())
            return "";
        
        if(num1[0]=='0'||num2[0]=='0')
            return "0";
            
        string str("");
        
        int m = num1.size();
        int n = num2.size();
        
        vector<int> res(m+n-1,0);   //注意是m+n-1位int数组即可
        vector<int> vnum1(m);
        vector<int> vnum2(n);
        int i,j;
        
        for(i=0;i<m;i++)
            vnum1[i] = num1[i]-'0';
            
        for(i=0;i<n;i++)
            vnum2[i] = num2[i]-'0';
            
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
                res[i+j] += vnum1[i]*vnum2[j];
                
        int carry = 0;
                     
         for(i=m+n-2;i>=0;--i)
         {
             str+=((res[i]+carry)%10+'0');
             carry = (res[i]+carry)/10;
         }
         
         if(carry!=0)
            str+=(carry+'0');
        
        return string(str.rbegin(),str.rend());   //注意不要忘记reverse字符串,因为str的第0位表示的是结果的低位,所以需要reverse
    }

  

  

posted @ 2013-09-19 14:55  summer_zhou  阅读(158)  评论(0编辑  收藏  举报