描述
求10000以内n的阶乘。
输入只有一行输入,整数n(0<=n<=10000)。输出一行,即n!的值。
方法一:
#include<iostream>
using namespace std;
int ans[100000000],jinwei,chengji;
int main()
{
int k=1,n;
cin>>n;
ans[1]=1;
for(int i=1;i<=n;i++)//枚举因式中的每一个因子
{
jinwei=0;
for(int j=1;j<=k;j++)
{
chengji=ans[j]*i+jinwei;
jinwei=chengji/10;
ans[j]=chengji%10;
}
while(jinwei)
{
ans[++k]=jinwei%10;
jinwei/=10;
}
}
for(int i=k;i>=1;i--)
{
cout<<ans[i];
}
}
方法二:
方法一中定义数组太大,可以让a[0]存储位数
#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=50000;
int a[MAXN]={1,1},n,i,j,k,c;
int main()
{
cin>>n;
k=a[0];
for(i=1;i<=n;i++)
{
for(j=1;j<=k;j++)
a[j]=a[j]*i;
for(j=1;j<=k-1;j++)
if(a[j]>=10)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
}
while(a[k]>=10)
{
c=a[k]/10;
a[k]=a[k]%10;
a[++k]=c;
}
}
for(int i=k;i>=1;i--) cout<<a[i];
return 0;
}