hdu1042计算N阶乘!!!
我的代码是修改别人的,杭电上g++显示wrong answer其他(c,c++什么的)显示超时
#include<stdio.h>
#include<string.h>
#define N 9000
int main()
{
int n,s[N]={1,1},t,a,b;
while(scanf("%d",&n))
{
if(n==1||n==0)
{
printf("%d",n);
continue;
}
memset(s,0,N);
s[0]=1,s[1]=1,t=2,a=1,b=0;
while( 1 )
{
if(a <= *s ){NULL;}
else if(++t <= n )
{
b = 0 , a =1;
}
else
break;
b += s[a] *t;
s[a]=b%10000;
b=b/10000;
if(*s == a++ && b)
{
(*s) ++;
}
}
for(printf("%d",s[*s]);--*s >0;)
{
printf("%04d",s[*s]);
}
printf("\n");
}
return 0;
}
ac代码雨中飞燕的
#include<stdio.h>
#define N 10005
int main()
{
int t,a,b;
int n;
while(scanf("%d",&n)!=EOF)
{
t=2,a=1,b=0;
if(n==0||n==1){printf("1\n");continue;}
long s[N]={1,1};
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%10000,b/=10000;
for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);
printf("\n");
}
return 0;
}
我想问下为什么会错,并且c++ g++ c 为什么错误类型不同
[解决办法]
代码是很强大 ,但是有点难看懂啊!写两个人人都可以看懂的!
#include<iostream>#include<cmath>using namespace std;void calculate(int n){ int i,j,head,tail; int len=(int)(n*log10((n+1)/2)); //计算n!有数数字的个数 len+=4; //保险起见,多加4位 char *arr=(char *)malloc(len); if(arr==NULL){ printf("alloc memory fail\n"); return ; } memset(arr,0,sizeof(char)*len); head=tail=len-1; arr[tail]=1; for(i=2;i<=n;i++){ int c=0; for(j=tail;j>=head;j--){ int p=arr[j]*i+c; arr[j]=(char)(p%10); c=p/10; } while(c>0){ head--; arr[head]=(char)(c%10); c/=10; } }// printf("%ld!=",n); for(i=head;i<=tail;i++) printf("%c",arr[i]+'0'); printf("\n"); free(arr);}int main(){ int n; while(scanf("%d",&n)==1){ if(n==0){ puts("1"); continue; } calculate(n); } return 0;}