您的位置:首页 > 其它

N!(大整数乘法)

2012-07-28 10:50 246 查看
杭电1042

View Code

#include<stdio.h>
#include<memory.h>
int a[10000];
int Mulity(int n)
{
int carry,i,j,w,g,t;
memset(a,0,sizeof(a));
a[0]=1;
w=1;  //刚开始时只有1位
for(i=1;i<=n;i++)
{
carry=0;
t=w;
//用数字与原有的结果的各位的数字一一相乘,从而分解数字(利于存储)!!!
for(j=0;j<w;j++)
{
g=a[j];
a[j]=(g*i+carry)%10000; //得到数字的每四位数字,将十进制数改为“万进制数”
carry=(g*i+carry)/10000; //carry表示进位,类似于大整数的加法!!!
if(carry && j==w-1)
{
t++;
a[j+1]=carry;
carry=0;
}
}
w=t;
}
return w;
}
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{

j=Mulity(n);
printf("%d",a[j-1]);
for(i=j-2;i>=0;i--)
printf("%04d",a[i]);   // 对于不满四位的数字,在前面对其补0!!!
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: