即用数组a,数组中的每个元素存储4位数,,
比如,计算9的阶乘,在计算到7的阶乘时,7!为5040,可以用a[0]存储5040,没有产生进位,然后8!=5040*8=40320,如果看成万进制则产生了进位,那么a[0]=320(注意输出时不足4位的要在前边补0),a[1]=4(最高位不用补0),9!=40320*9,那么a[0]*9=320*9=2880,a[1]*9=4*9=36,那么9!=a[1]+a[0]=362880(注意这里的+相当于字符串连接,)
#include <iostream>
#include <cstdio>
using namespace std;
int a[10005];
int main()
{
int n;
while(cin>>n)
{
int index=0,tmp;
a[0]=1;
for(int i=1; i<=n; i++)
{
tmp=0;//进位
for(int j=0; j<=index; j++)
{
a[j]=a[j]*i+tmp;
tmp=a[j]/10000;
a[j]%=10000;
}
if(tmp>0)
a[++index]=tmp;
}
cout<<a[index];
for(int i=index-1; i>=0; i--)
printf("%04d",a[i]);
cout<<endl;
}
return 0;
}
java
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
BigInteger bt = new BigInteger("1");
int n=sc.nextInt();
for(int i=1;i<=n;i++){
BigInteger b=new BigInteger(String.valueOf(i));
bt=bt.multiply(b);
}
System.out.println(bt);
}
sc.close();
}
}