高精度乘模板(十分简洁)

这个方法是先把字符串转化为了整形数组,然后模拟竖式乘法进行计算、

相比计较与把乘法转化为加法的方法,更加简洁,易懂,细节也更少,复杂度都与位数有关系

当仅仅用到高精度乘法时,用这个编码速度更快,不易错

当题目中同时要求用高精度的加法时,顺延之前的代码更方便

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int L=500;//设置高精度乘法长度 
 5 string mul(string a,string b)
 6 {
 7     string s;
 8     int na[L],nb[L],nc[L],La=a.size(),Lb=b.size();
 9     //将na,nb,nc置为全0
10     //nc用于存储乘积 
11     fill(na,na+L,0);
12     fill(nb,nb+L,0);
13     fill(nc,nc+L,0);
14     //将字符串转为整型数据,倒序 
15     for(int i=La-1;i>=0;i--) na[La-i]=a[i]-'0';
16     for(int i=Lb-1;i>=0;i--) nb[Lb-i]=b[i]-'0';
17     //按位模拟竖式乘法 
18     for(int i=1;i<=La;i++)
19     {
20         for(int j=1;j<=Lb;j++)
21         {
22             nc[i+j-1]+=na[i]*nb[j];//注意加号 
23         }
24      } 
25     //进位 
26      for(int i=1;i<=La+Lb;i++)
27      {
28          nc[i+1]+=nc[i]/10;
29          nc[i]%=10;
30      }
31      //判断La+Lb位上是否为0 
32      if(nc[La+Lb]) s+=nc[La+Lb]+'0';
33      //将整形转换为字符串 
34      for(int i=La+Lb-1;i>=1;i--)
35      {
36          s+=nc[i]+'0';
37      }
38      return s;
39  }
40  int main()
41  {
42      string a,b;
43      cin>>a>>b;
44      cout<<mul(a,b)<<endl;
45      return 0;
46  }
复制代码

 

posted @   格蕾  阅读(165)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示