【题目描述】 输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。
【输入】 输入两个高精度正整数M和N。
【输出】 求这两个高精度数的积。
【输入样例】
36
3【输出样例】
108
M和N的长度都远远大过int的范畴,我们要用字符串存储这两个大数,并且手动模拟乘法过程。
我觉得难点就是模拟过程中字符串的位置,因为读取后的M和N是高位在字符串的0下标,而最后存储结果是低位存储在字符串的0下标。
测试数组光一组是远远不够的,建议写好的代码再测试测试 99×9 9999×99 1000×10 10×1000 85695×5 6×26522这样的数据,如果能通过大概是没问题了。
模拟乘法的过程我是用第二个数字从低位到高位逐位乘第一个数字并将结果都存储在同一个sum(结果)字符串中。注意乘到最后一位有进位的情况的处理。
#include<iostream>
#include<cstdio>
using namespace std;
int sum[500]={0};
string m,n;
void cheng(int i,int x)
{
int last1=0;
int last2=0;
int ex;
int now=0;
for(int j=m.length()-1;j>=0;j--)
{
now=(x*(m[j]-'0')+last1)%10;
last1=(x*(m[j]-'0')+last1)/10;
ex=(last2+now+sum[i+m.length()-j-1])/10;
sum[i+m.length()-j-1]=(last2+now+sum[i+m.length()-j-1])%10;
last2=ex;
}
sum[i+m.length()]+=(last1+last2);
}
int main()
{
cin>>m;
cin>>n;
for(int i=n.length()-1;i>=0;i--)
{
cheng(n.length()-i-1,n[i]-'0');
}
int i=499;
while(sum[i]==0)
i--;
while(i>=0)
{
printf("%d",sum[i]);
i--;
}
printf("\n");
return 0;
}