1 class Solution {
 2 public:
 3     
 4     string multiply(string num1, string num2) {
 5         if(num1=="0"||num2=="0")
 6             return "0";
 7         int len1=num1.length(),len2=num2.length();
 8         string res(len1+len2, '0');
 9         for(int i=len1-1;i>=0;i--){
10             int n1=num1[i]-'0';
11             for(int j=len2-1;j>=0;j--){
12                 int n2=num2[j]-'0';
13                 int sum=(res[i+j+1]-'0') + n1*n2;
14                 res[i+j+1]=sum%10+'0';
15                 res[i+j] += sum/10;
16             }
17         }
18         while(res[0]=='0')
19             res.erase(res.begin());
20         return res;
21     }
22 };

利用竖式计算的方法

首先,p位数乘以q位数,结果不超过p+q位数,所以新建一个长度为p+q的数组来存放答案

在答案数组中,num1[i]*num2[j]必然改变res[i+j+1],可能改变res[i+j],因为有进位

posted on 2019-08-06 23:50  高数考了59  阅读(101)  评论(0)    收藏  举报