高精度乘法(C++实现)

it2025-11-18  3

【算法分析】 1.C++不支持大数运算,故而引入高精度算法。 2.高精度乘法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。(注意:字符串中0下标从左开始,竖式运算中0下标从右开始,故代码中需要有一个逆序操作。如a[i]=s1[s1.length()-i-1]-'0';) 3.对最高位做判断,删除前导0,然后输出便得结果。 【程序代码】

#include <bits/stdc++.h> using namespace std; int a[100],b[100],c[100]; int main() { string s1,s2,t; cin>>s1>>s2; for(int i=0; i<s1.length(); i++) { a[i]=s1[s1.length()-i-1]-'0'; } for(int i=0; i<s2.length(); i++) { b[i]=s2[s2.length()-i-1]-'0'; } for(int i=0; i<s1.length(); i++) { int carry=0; for(int j=0; j<s2.length(); j++) { c[i+j]+=a[i]*b[j]+carry; carry=c[i+j]/10; c[i+j]%=10; } // 每一遍循环之后的进位 c[i+s2.length()]+=carry; } int index=s1.length()+s2.length(); //删除前导零 while(c[index]==0 && index>0) index--; for(int i=index; i>=0; i--) cout<<c[i]; cout<<endl; return 0; } /* input: 123456 654321 output: 80779853376 */

【参考文献】 https://blog.csdn.net/lichen_yun/article/details/87557301  

最新回复(0)