写的一个C++实现10000的阶乘的代码
#include
#define N 10000//设阶乘数为10000
#define SIZE 40000//预留40000位保存结果
using namespace std;
void mul(int *n1,int n2)//两数相乘
{
for(int i=0;i!=SIZE;++i)
n1[i]*=n2;
for(int i=0;i!=SIZE;++i){
n1[i+1]+=(n1[i]/10);
n1[i]%=10;
}
}
int main()
{
int *num=new int[SIZE];
memset(num,0,SIZE);
num[0]=1;
//N的阶乘
for(int i=1;i!=N+1;++i){
mul(num,i);
}
//输出时排除开头的0
for(int i=SIZE-1;i!=-1;--i){
if(0!=num[i]){
for(int j=i;j!=-1;--j){
cout <
break;
}
}
delete[] num;
return 0;
}
很多地方不合理,尤其是需要预留空间,这就要我先预算一下会有多少位了。运算时间20秒左右,效率也不行,应该在10秒左右比较合理,机器为P3 733,内存256MB。
#include
#include
int arr[1000000]={0};
void mul(int arr[],int n,int *len)
{
int c=0,i,l=*len;
for(i=0;i
arr[i]=arr[i]*n+c;
c=arr[i]/10;
arr[i]%=10;
}
while(c!=0)
{
arr[l++]=c%10;
c/=10;
}
*len=l;
}
int main()
{
int i,n,len;
scanf("%d",&n);
len=1;arr[0]=1;
for(i=2;i<=n;i++)
mul(arr,i,&len);
for(i=len-1;i>=0;i--)
printf("%d",arr[i]);
printf("\n");
getch();
return 0;
}
好久没写过纯C的程序了,呵呵
请用32位的编译器编译,不要用TC
回复楼上的,要说效率,10000的阶乘在一秒内出结果是不过分的,只是我们的代码质量太差,用的是最原始的算法,呵呵呵