题目链接:
题目描述:给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:多个测试数据,每个测试数据输入一个数N
输出描述:每组用一行输出N的阶乘
输入
1
2
3
输出
1
2
6
思路:刚看到时我以为是打表,但是看到N的最大值后就放弃了这种想法。然后就想到了大数乘法,由于以前只写过大数加,所以比赛时一时没有思路,就选择了放弃,比赛结束补题时才把它A了,接下来是我的代码,希望对各位有所帮助~
1 #include2 using namespace std; 3 4 int n; 5 int a[35000],b[35000],num[100]; //为了试数组大小试了很久,最后把范围缩小到了3e5左右 6 7 int main(){ 8 while(~scanf("%d",&n)){ 9 memset(a,0,sizeof(a));10 memset(b,0,sizeof(b));11 a[0]=1;12 int flag=1; //用来记录a数组的长度13 for(int i=1;i<=n-1;i++){14 int m=i;15 for(int j=0;j =10){33 a[j+1]=a[j+1]+a[j]/10;34 a[j]=a[j]%10;35 }36 }37 }38 int i;39 for(i=flag;i>=0;i--){ //去除前导零40 if(a[i]!=0) break;41 }42 for(;i>=0;i--){43 printf("%d",a[i]);44 }45 printf("\n");46 }47 }