题目描述
大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。例如:我们要计算如下两个数的乘积时,用我们已知的数据类型是无法精确表示其结果的:
a1 = 11111111111111111111111111111111111
b1 = 11111111111111111111111111111111111111
求:a1 * b1;
输入
输入两行:每行一个数字,每行的数字不超过100位;
输出
输出一行:为这两个大数的乘积
样例输入
1111111111111111111
111111111111111
样例输出
123456790123456666654320987654321
参考代码
#include<stdio.h>
#include<string.h>
#define LEN 300
int Input(char n[])
{
char s[LEN];
int i,l;
for (i=0;i<LEN;i++)
n[i]=0;
if(scanf("%s",s)<1)
return -1;
l=strlen(s);
for (i=0;i<l;i++)
n[i]=s[l-i-1]-'0';
return 0;
}
void Print(char n[])
{
int i;
for (i=LEN-1;i>0;i--)
if(n[i]!=0)
break;
for (;i>=0;i--)
printf("%d",n[i]);
printf("n");
}
void Mul(char a[],char b[],char c[])
{
int i,j;
for(i=0;i<LEN*2;i++)
c[i]=0;
for(i=0;i<LEN;i++)
{
for(j=0;j<LEN;j++)
{
c[i+j]+=a[j]*b[i];
if(c[i+j]>=10)
{
c[i+j+1]+=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
}
}
}
int main()
{
char a[LEN],b[LEN],c[LEN*2];
Input(a);
Input(b);
Mul(a,b,c);
Print(c);
return 0;
}
解析
暂无