c语言大数乘法

来源:互联网 发布:h3c查看端口状态 编辑:程序博客网 时间:2024/06/06 08:58

大数乘法

Time Limit: 3000ms, Memory Limit: 10000KB , Accepted:2347, Total Submissions:3364

Description

编写一个程序实现A*B,A和B两个数的位数有近100位。注意:需要处理正负数的情形,但不考虑小数。
提示:C或C++没有直接表示100位的数据类型,我们得自己先构造一个合适的类型,接下来还需要一些巧妙的方法处理100位数的输入和输出,因为标准输入输出同样没有这样类型的处理功能。

Input

分别用两行输入不超过100位的A和B(没有小数点,允许正负号)。

Output

输出A*B的结果。

  • Sample Input 
    33333333333332222222222222
  • Sample Output

    7407407407405925925925926


#include<stdio.h>
#include<string.h>
int x[100],y[100],c[200],m,n;
void cal();
void output();
int main()
{
char a[100],b[100];
int i,j,z,d,k;
scanf("%s",&a);
scanf("%s",&b);
m=strlen(a);
n=strlen(b);
if(a[0]=='-'&&b[0]!='-')
{
j=0;
for(i=m-1;i>=1;i--)
{
x[j]=a[i]-48;
j++;

j=0;
for(i=n-1;i>=0;i--)
{
y[j]=b[i]-48;
j++;
}
printf("-");
cal();
    }  
if(a[0]!='-'&&b[0]=='-')
{
j=0;
for(i=m-1;i>=0;i--)
{
x[j]=a[i]-48;
j++;

j=0;
for(i=n-1;i>=1;i--)
{
y[j]=b[i]-48;
j++;

}

printf("-");

cal();
    }
    if(a[0]!='-'&&b[0]!='-')
{
j=0;
for(i=m-1;i>=0;i--)
{
x[j]=a[i]-48;
j++;

j=0;
for(i=n-1;i>=0;i--)
{
y[j]=b[i]-48;
j++;
}
cal();
    }
    if(a[0]=='-'&&b[0]=='-')
{
j=0;
for(i=m-1;i>=1;i--)
{
x[j]=a[i]-48;
j++;

j=0;
for(i=n-1;i>=1;i--)
{
y[j]=b[i]-48;
j++;
}
cal();
    }
}
void cal()
{
int i,j,z,k,d;
for(i=0;i<=m+n;i++)
{
c[i]=0;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
z=x[i]*y[j];
if(z>=10)
{
d=z%10;
k=z/10;
    c[i+j]+=d;
   c[i+j+1]+=k;
}
else c[i+j]+=z;
}
    }
    for(i=0;i<m+n;i++)
    {
    if(c[i]>=10)
    {
    d=c[i]%10;
    k=c[i]/10;
    c[i]=d;
       c[i+1]+=k;
    }
    }
for(int i=m+n-1;i>=0;i--)
{
if(i==m+n-1&&c[i]==0)continue;
else
{
printf("%d",c[i]);
   }
}
}


原创粉丝点击