小C求改解决方法
小C求改
題目:
这个题目中,会给你一个数字,要求算出这个数字的阶乘。阶乘的定义,比如说下面例子里出现的10. 把1 2 3 4 5 6 7 8 9 10 这10个数字相乘,得出3628800。3628800是个7位数。
输入的东西是由很多行整数组成的。第一行包含一个整数n,n就代表我们需要完成的测试的数量,第一行下面将跟着n行,一行一个整数,这个整数要大于小于1,小于等于10的七次方
输出的东西就是 所输入数字的阶乘的结果的位数。
示例輸入
2
10
20
示例輸出
7
19
我的程序段:
Judge Status"Time Limit Exceeded "
爲什麽呢....... 要AC的話該怎麽改
------解决方案--------------------
参见斯特灵公式
題目:
这个题目中,会给你一个数字,要求算出这个数字的阶乘。阶乘的定义,比如说下面例子里出现的10. 把1 2 3 4 5 6 7 8 9 10 这10个数字相乘,得出3628800。3628800是个7位数。
输入的东西是由很多行整数组成的。第一行包含一个整数n,n就代表我们需要完成的测试的数量,第一行下面将跟着n行,一行一个整数,这个整数要大于小于1,小于等于10的七次方
输出的东西就是 所输入数字的阶乘的结果的位数。
示例輸入
2
10
20
示例輸出
7
19
我的程序段:
- C/C++ code
#include"stdio.h" #include"math.h" int factorial(int n) { long a[10000]; char b[n]; int i,j,l,c,m=0,w; a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i+c; c=a[j]/10000; a[j]=a[j]%10000; } if(c>0) { m++; a[m]=c; } } w=m*4+log10(a[m])+1; printf("%d\n",w); return w; } main() { long z[1024],o,x; scanf("%d",&x); while(x>0&&x<=10000000) {for(o=0;o<x;o++) scanf("%d",&z[o]); for(o=0;o<x;o++) { if(x<=10000000&&x>=1) factorial(z[o]); else printf("error!\n"); } scanf("%d",&x); } }
Judge Status"Time Limit Exceeded "
爲什麽呢....... 要AC的話該怎麽改
------解决方案--------------------
参见斯特灵公式