描述
在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
现在输入两个整数,请输出它们的乘积。
输入
输入描述:
两行,每行一个正整数,每个整数不超过10000位
输入样例:
99
101
输出
输出描述:
一行,两个整数的乘积
输出样例:
9999
我们可以根据这个图也就是我们乘法的过程 来思考这个问题 。
第一步 存数
第二步 处理位计算
第三步 输出
其实 核心就在于处理位计算,
#include<cstdio>
#include<cstring>
using namespace std;
char A[10001],B[10001];
int a[10001],b[10001],c[1000001],x,i,l3,l1,l2,j;
int main()
{
scanf("%s%s",A,B);
l1=strlen(A);
l2=strlen(B);
for (i=0;i<=l1-1;i++)
a[l1-i]=A[i]-48;
for (i=0;i<=l2-1;i++)
b[l2-i]=B[i]-48;
for(i=1;i<=l1;i++)
{
x=0;
for(j=1;j<=l2;j++)
{
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];//乘积+进位+本数(就是乘法的下一行或者下下行这个位)
x=c[i+j-1]/10;//进位
c[i+j-1]%=10;//保留数
}
c[i+l2]=x;//可以看成图中第一步的c4,即每一次乘法的最大位。
}
l3=l1+l2;//考虑这个数最大的位数
while(c[l3]==0&&l3>1)
l3--;//去掉开头的0
for(i=l3;i>=1;i--)//输出
printf("%d",c[i]);
return 0;
}