【算法分析】
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)