#define MAXLEN 300/*假设做的是300的阶乘,自己可修改*/
#define MAXSUM 300/*用来存放阶乘结果的数组最大长度*/
#include
#include
main()
{
int i,j,k,n,sum,s;
int a[MAXSUM];
for(i=0;i
a[i]=0;
}//数组赋初值
a[0]=1;
for(i=1;i<=MAXLEN;i++)
{
for(j=MAXSUM-1;j>=0;j--)
{
if(a[j]!=0)
{
n=j+1;
break;
}
}//确定阶乘结果保存到数组中,存到数组的第几个元素
for(k=0;k
a[k]=a[k]*i;
}//对存入数组中的数进行乘法运算
for(k=0;k
sum=a[k];
if(sum/100>0)
{
a[k]=sum%100;
a[k+1]=a[k+1]+sum/100;
}
}//乘法完成后进行进位
}
for(s=n;s>=0;s--)
{
if(a[s]>=10)
printf("%d",a[s]);
else printf("0%d",a[s]);
}//打印完成的阶乘结果(由于03在数组中只显示3故进行相关操作补足
printf("\n");
}
测试通过 ,够详细了吧
#include
#define Maxlen 10000
#define N 100 //阶数100
int mult(int num[],int len,int n)
{
int i,rem=0;
for(i=0;i
rem+=num[i]*n;
num[i]=rem%10;
rem=rem/10;
}
if(rem>0)
{
num[len]=rem%10;
len++;
rem=rem/10;
}
return len;
}
main()
{
int num[Maxlen];
int len=1,i;
num[0]=1;
for(i=2;i<=N;i++)
len=mult(num,len,i);
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("\n");
}
main()
{
long double m=1;
int i;
for(i=1;i<=100;i++)
m=m*i;
printf("%e\n",m);
}
科学计数法比较好看些,我认为这样还好些
你换double型
#include
void main()
{
double sum;
sum=1;
for(int i=1;i<=100;++i)
{
sum*=i;
}
cout <
#include
#define
Maxlen
10000
#define
N
100
//阶数100
int
mult(int
num[],int
len,int
n)
{
int
i,rem=0;
for(i=0;i
rem+=num[i]*n;
num[i]=rem%10;
rem=rem/10;
}
if(rem>0)
{
num[len]=rem%10;
len++;
rem=rem/10;
}
return
len;
}
main()
{
int
num[Maxlen];
int
len=1,i;
num[0]=1;
for(i=2;i<=N;i++)
len=mult(num,len,i);
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("\n");
}