如题所述
åçä¸ä¸ªC++å®ç°10000çé¶ä¹ç代ç
#include<iostream>
#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 <<num[j];
}
break;
}
}
delete[] num;
return 0;
}
å¾å¤å°æ¹ä¸åçï¼å°¤å ¶æ¯éè¦é¢ç空é´ï¼è¿å°±è¦æå é¢ç®ä¸ä¸ä¼æå¤å°ä½äºãè¿ç®æ¶é´20ç§å·¦å³ï¼æçä¹ä¸è¡ï¼åºè¯¥å¨10ç§å·¦å³æ¯è¾åçï¼æºå¨ä¸ºP3 733ï¼å å256MBã
#include<iostream>
#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 <<num[j];
}
break;
}
}
delete[] num;
return 0;
}
å¾å¤å°æ¹ä¸åçï¼å°¤å ¶æ¯éè¦é¢ç空é´ï¼è¿å°±è¦æå é¢ç®ä¸ä¸ä¼æå¤å°ä½äºãè¿ç®æ¶é´20ç§å·¦å³ï¼æçä¹ä¸è¡ï¼åºè¯¥å¨10ç§å·¦å³æ¯è¾åçï¼æºå¨ä¸ºP3 733ï¼å å256MBã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2009-02-23
#include<stdio.h>
#include<conio.h>
int arr[1000000]={0};
void mul(int arr[],int n,int *len)
{
int c=0,i,l=*len;
for(i=0;i<l;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的阶乘在一秒内出结果是不过分的,只是我们的代码质量太差,用的是最原始的算法,呵呵呵
#include<conio.h>
int arr[1000000]={0};
void mul(int arr[],int n,int *len)
{
int c=0,i,l=*len;
for(i=0;i<l;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的阶乘在一秒内出结果是不过分的,只是我们的代码质量太差,用的是最原始的算法,呵呵呵