Multiply Strings
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.
题目意思:
给两个string,计算string的乘积。
string中的数可以非常大并且是非负数。
(就是大数的乘法运算嘛。。。)
解题思路:
由于之前已经练习过了大数的加减乘除四则运算了,所以这道题跟那个是一样的原理。
要想实现乘法,首先得实现大数的加法,因为按照小学摆竖式计算乘法的时候需要在会加法的基础上才行。
于是我们首先实现了大数的加法,基本上就是模拟了用竖式每一位相加的过程,其中注意到产生的进制要参与高位的运算。
实现了加法后,乘法也就出来了。
代码如下:
1 string operator+(const string &num1,const string &num2){ 2 int nCarry = 0; 3 string numTemp; 4 5 int i = num2.size() - 1; 6 int j = num1.size() - 1; 7 for(; i >= 0 || j >= 0; i--,j--){ 8 char a,b; 9 if(i>=0) 10 b = num2[i] - '0'; 11 else 12 b = 0; 13 if(j>=0) 14 a = num1[j] - '0'; 15 else 16 a = 0; 17 char c = a + b + nCarry; 18 nCarry = c / 10; 19 numTemp.push_back(c%10 + '0'); 20 } 21 22 if(nCarry != 0){ 23 numTemp.push_back(nCarry + '0'); 24 } 25 26 for(i = 0, j = numTemp.size() - 1; i < j; i++,j--){ 27 char cTemp = numTemp[i]; 28 numTemp[i] = numTemp[j]; 29 numTemp[j] = cTemp; 30 } 31 return numTemp; 32 } 33 string operator*(const string &num1,const string &num2){ 34 int nCarry = 0; 35 string numTemp; 36 string result; 37 38 int i = num2.size()-1; 39 for(; i >= 0; i--){ 40 char a = num2[i] - '0'; 41 int j = num1.size() - 1; 42 for(; j >= 0; j--){ 43 char b = num1[j] - '0'; 44 char c = b * a + nCarry; 45 nCarry = c/10; 46 numTemp.push_back(c % 10 + '0'); 47 } 48 if(nCarry != 0){ 49 numTemp.push_back(nCarry + '0'); 50 nCarry = 0; 51 } 52 53 //reverse 54 int n = 0; 55 int m = numTemp.size() - 1; 56 for(; n < m; n++,m--){ 57 char cTemp = numTemp[n]; 58 numTemp[n] = numTemp[m]; 59 numTemp[m] = cTemp; 60 } 61 62 for(int t = num2.size() - 1; t > i; t--) 63 { 64 numTemp.push_back('0'); 65 } 66 67 result = result + numTemp; 68 numTemp.clear(); 69 } 70 return result; 71 } 72 73 class Solution { 74 public: 75 string multiply(string num1, string num2) { 76 string ret; 77 string zero = "0"; 78 if(!num1.compare(zero) || !num2.compare(zero)){ 79 ret = "0"; 80 return ret; 81 } 82 ret = num1 * num2; 83 return ret; 84 } 85 };