题目描述
贝贝是学校信息学编程小组的学生,一天,他的数学老师碰到这样一个问题:他想求两个很长的数的乘积,但用普通的计算器无法完成计算,于是他请编程班的贝贝帮忙设计一个“超级计算器”,解决他所遇到的问题。
请你编一程序,帮贝贝解决这个问题。
输入
两行,分别是两个在10^100以内的自然数。
输出
两数相乘的结果。
样例输入
578474357954668 12435124571
样例输出
7193400702295541350947428
呦呦呦,这不高精度乘法吗,几天不见,这么拉了
OK呀,算法一样,看上次发的解释,这次不讲了
#include<bits/stdc++.h>
using namespace std;
char s1[1005],s2[1005];
int a[1005],b[1005],c[1005],i=1;
int main()
{
scanf("%s",&s1);
scanf("%s",&s2);
a[0]=strlen(s1);
b[0]=strlen(s2);
for(i=a[0];i>0;i--)
{
a[a[0]-i+1]=s1[i-1]-'0';
}
for(i=b[0];i>0;i--)
{
b[b[0]-i+1]=s2[i-1]-'0';
}
if(a[a[0]]==0||b[b[0]]==0)
{
cout<<0;
return 0;
}
for(int j=1;j<=b[0];j++)
{
for(int i=1;i<=a[0];i++)
{
c[i+j-1]=c[i+j-1]+a[i]*b[j];
c[i+j]=c[i+j]+c[i+j-1]/10;
c[i+j-1]=c[i+j-1]%10;
}
}
if(c[a[0]+b[0]]>0)c[0]=a[0]+b[0];
else
c[0]=a[0]+b[0]-1;
for(int i=c[0];i>0;i--)
{
printf("%d",c[i]);
}
return 0;
}
本文介绍了如何使用C++编写一个高精度乘法程序,帮助解决大数乘法问题。程序通过将输入的数转化为字符数组,然后进行逐位相乘和进位计算,最后输出结果。这种方法适用于处理超过普通计算器范围的大整数乘法。
1935

被折叠的 条评论
为什么被折叠?



