leetcode-multiply strings

这道题就是大数运算。

lexi's的想法很好,在操作之前先把num1和num2给逆置,方便操作。 

Tenos的文章通过一张图把计算过程直观的展示出来。

image

 

 

 1 class Solution {
 2 public:
 3     string multiply(string num1, string num2) {
 4         int m = num1.size(); int n = num2.size();
 5         int *d = new int[m+n];
 6         fill_n(d,m+n,0);    
 7         reverse(num1.begin(),num1.end());
 8         reverse(num2.begin(),num2.end());
 9         for (int i = 0; i < m; i++)
10         {
11             for (int j = 0; j < n; j++)
12             {
13                 d[i + j] +=(num1[i]-'0')*(num2[j]-'0');
14             }
15         }
16         string res("");
17         for (int i = 0; i < m + n; i++)
18         {
19             int digit = d[i] % 10;
20             int carry = d[i] / 10;
21             res.insert(0,1,char(digit+'0'));//注意在插入char元素时的用法。
22             if (i < m + n - 1) d[i + 1] += carry;
23         }
24         //此时有可能前面的(下标小的)一些元素是0,要去除。
25         while (res[0] == '0' && res.length()>1)//是>1,不能是>0,否则结果为0时就删空了。
26         {
27             res.erase(res.begin());
28         }
29         return res;
30     }
31 };

 

Ref:

http://leetcodenotes.wordpress.com/2013/10/20/leetcode-multiply-strings-%E5%A4%A7%E6%95%B4%E6%95%B0%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B9%98%E6%B3%95/

http://www.cnblogs.com/TenosDoIt/p/3735309.html

转载于:https://www.cnblogs.com/forcheryl/p/4090880.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值