#include <iostream>
using namespace std;
const int N=10000;
void func()
{
int n;
while(cin>>n)
{
int a[N]={0};
a[0]=1;
int sum=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<sum;j++)
{
a[j]=i*a[j];
}
for(int j=0;j<sum;j++)
{
if(a[j]>=10)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
if(j==sum-1)sum++;
}
}
}
for(int i=sum-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
}
void func1()
{
int n;
while(cin>>n)
{
int a[N]={0};
a[0]=1;
int sum=1;
for(int i=2;i<=n;i++)
{
int inc=0;
int j=0;
for(;j<sum;j++)
{
int newk=i*a[j]+inc;
int div=newk/10;
int mod=newk%10;
a[j]=mod;
inc=div;
}
while(inc>0)
{
sum++;
int newk=inc;
int div=newk/10;
int mod=newk%10;
a[j]=mod;
inc=div;
j++;
}
}
for(int i=sum-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
}
int main(int argc, char *argv[])
{
//printf("Hello, world\n");
//func();
func1();
return 0;
}
两种计算方式,一种是每一位的积保存下来,然后再按顺序将进位和保留位计算出来;另一种是模拟正常乘法,边乘边进位
-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000