计算n!的值,n<=1000,由于没有这么大的类型的数据可以存储n!,所以用一个数组a[],表示大数的max的每一位,a[0]表示个位,a[1]表示十位,以此类推,注意的是a乘以k相当于,a[]数组的每个元素都乘以K,最终输出。
#include<iostream> #include<stdio.h> #include<string.h> #define MAX 3000 using namespace std; int main() { int n; scanf("%d",&n); int a[MAX];//数组a表示大数的每一位 memset(a,0,sizeof(a)); a[0]=1; int s=0; int c=0;//每个数的进位 for(int i=2;i<=n;i++) { for(int j=0;j<MAX;j++) { s=a[j]*i+c;//每一位数乘以i再加上进位 a[j]=s%10;//每一位的数 c=s/10;//进位 } } int k; for(k=MAX-1;k>=0;k--) if(a[k]) break;//从最高位的第一个不为零的数算起 for(int m=k;m>=0;m--) { printf("%d",a[m]); } return 0; }