大数乘法模拟

 1 // 手动模拟大整数乘法
 2 // 使用c++ 里的vector来储存数据
 3 // 并且倒着储存数字
 4 // 时间复杂度o(n2)
 5 void normalize(vector<int>&  num){
 6     // n 位 * m 位相乘最多生成n + m位
 7     num.push_back(0);
 8     for(int i = 0;i < num.size();i ++){
 9         if(num[i] < 0){
10             int borrow = (abs(num[i] + 9)) / 10;
11             num[i + 1] -= borrow;
12             num[i] += borrow * 10;
13         }
14         else{
15             num[i + 1] += num[i] / 10;
16             num[i] %= 10;
17         }
18     }
19     while(num.size() > 1 && num.back() == 0)num.pop_back();//去掉尾部的0(相当于真正的头部)
20 }
21 
22 
23 vector<int> multiply(const vector<int>& a,
24                      const vector<int>& b){
25     vector<int> c(a.size() + b.size() + 1,0);
26     for(int i = 0;i < a.size();i ++){
27         for(int j = 0;j < b.size();j ++){
28             c[i + j] += a[i] * b[j];
29         }
30     }
31     normalize(c);
32     return c;
33  }

 

转载于:https://www.cnblogs.com/youjiu/p/10877986.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值