【LeetCode练习题】Multiply Strings

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 };

 

 

你可能感兴趣的:(LeetCode)