高精度乘模板(十分简洁)
这个方法是先把字符串转化为了整形数组,然后模拟竖式乘法进行计算、
相比计较与把乘法转化为加法的方法,更加简洁,易懂,细节也更少,复杂度都与位数有关系
当仅仅用到高精度乘法时,用这个编码速度更快,不易错
当题目中同时要求用高精度的加法时,顺延之前的代码更方便
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律