#4725: 明明在自己電腦測沒有逾時可是他卻說TLE


trtc008056 (Takeshi)

學校 : 國立交通大學
編號 : 13721
來源 : [73.170.243.144]
最後登入時間 :
2019-04-08 10:05:14
c120. 00623 - 500! -- UVa623 | From: [123.192.129.188] | 發表日期 : 2011-01-10 00:42

如題,在電腦測1000!也不過才0.250s

但是他(網頁)說1s

實在是搞不清楚,應該也沒有掉到無限迴圈內

以下是程式碼,幫我看看哪邊有問題= =,感恩~ 

#include<stdio.h>

int main(){

int num[2000]={0};

int n;

int c,c2;

int l;

while(scanf("%d",&n)!=EOF){

num[0]=1;

for(c=1;c<2000;c++)num[c]=0;

for(c=1;c<=n;c++){

for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)

num[c2]*=c;

}

for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)

num[c2+1]+=num[c2]/10;

num[c2]%=10;

}

}

printf("%d!\n",n);//印出n!

for(l=1999;num[l]==0;l--);//計算要印出的長度

for(c=l;c>=0;c--){//印出

printf("%d",num[c]);

}

printf("\n");

}

 
#4727: Re:明明在自己電腦測沒有逾時可是他卻說TLE


linishan (L)

學校 : 國立交通大學
編號 : 1090
來源 : [104.132.150.102]
最後登入時間 :
2019-05-10 19:57:54
c120. 00623 - 500! -- UVa623 | From: [125.226.10.251] | 發表日期 : 2011-01-10 19:43

如題,在電腦測1000!也不過才0.250s

但是他(網頁)說1s

實在是搞不清楚,應該也沒有掉到無限迴圈內

以下是程式碼,幫我看看哪邊有問題= =,感恩~ 

#include

int main(){

int num[2000]={0};

int n;

int c,c2;

int l;

while(scanf("%d",&n)!=EOF){

num[0]=1;

for(c=1;c<2000;c++)num[c]=0;

for(c=1;c<=n;c++){

for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)

num[c2]*=c;

}

for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)

num[c2+1]+=num[c2]/10;

num[c2]%=10;

}

}

printf("%d!\n",n);//印出n!

for(l=1999;num[l]==0;l--);//計算要印出的長度

for(c=l;c>=0;c--){//印出

printf("%d",num[c]);

}

printf("\n");

}


那如果我給你1000筆1000 ?

要跑 250 s . .

 
#8018: Re:明明在自己電腦測沒有逾時可是他卻說TLE


kunpeng (小昆)

學校 : 福建省福州第十九中学
編號 : 33428
來源 : [183.252.16.216]
最後登入時間 :
2015-12-14 16:28:18
c120. 00623 - 500! -- UVa623 | From: [110.90.105.251] | 發表日期 : 2013-07-29 21:25

如題,在電腦測1000!也不過才0.250s

但是他(網頁)說1s

實在是搞不清楚,應該也沒有掉到無限迴圈內

以下是程式碼,幫我看看哪邊有問題= =,感恩~ 

#include

int main(){

int num[2000]={0};

int n;

int c,c2;

int l;

while(scanf("%d",&n)!=EOF){

num[0]=1;

for(c=1;c<2000;c++)num[c]=0;

for(c=1;c<=n;c++){

for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)

num[c2]*=c;

}

for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)

num[c2+1]+=num[c2]/10;

num[c2]%=10;

}

}

printf("%d!\n",n);//印出n!

for(l=1999;num[l]==0;l--);//計算要印出的長度

for(c=l;c>=0;c--){//印出

printf("%d",num[c]);

}

printf("\n");

}

#include<iostream>
#include<cstdio>
using namespace std;
int i;
void chengfa(int s[],int d)
{
 for(int j=0;j<i;j++)
  s[j]*=d;
 for(int j=0;j<i;j++)
  if(s[j]>=10)
  {
   if(j==i-1)i++;
   if(s[j+1]<0)s[j+1]=0;
   s[j+1]+=s[j]/10;
   s[j]%=10;
  }
  else if(s[j]<0)s[j]=-1;
}
void jiecheng(int z[],int k)
{
 for(int i=1;i<k;i++)chengfa(z,i);
}
int main()
{
 int s;
 while(cin>>s)
 {
  cout<<s<<'!'<<endl;
  int a[100000],z=s;
  for(i=0;i<99999;i++)a[i]=-1;
  i=0;
  while(s>0)
  {
   a[i]=s%10;
   i++;
   s/=10;
  }
  jiecheng(a,z);
  for(;a[i]<0;i--);
  for(;i>=0;i--)printf("%d",a[i]);
  cout<<endl;
 }
 return 0;
}

0.4s的

似乎位数太少了……

 

 
#8019: Re:明明在自己電腦測沒有逾時可是他卻說TLE


kunpeng (小昆)

學校 : 福建省福州第十九中学
編號 : 33428
來源 : [183.252.16.216]
最後登入時間 :
2015-12-14 16:28:18
c120. 00623 - 500! -- UVa623 | From: [110.90.105.251] | 發表日期 : 2013-07-29 21:27

如題,在電腦測1000!也不過才0.250s

但是他(網頁)說1s

實在是搞不清楚,應該也沒有掉到無限迴圈內

以下是程式碼,幫我看看哪邊有問題= =,感恩~ 

#include

int main(){

int num[2000]={0};

int n;

int c,c2;

int l;

while(scanf("%d",&n)!=EOF){

num[0]=1;

for(c=1;c<2000;c++)num[c]=0;

for(c=1;c<=n;c++){

for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)

num[c2]*=c;

}

for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)

num[c2+1]+=num[c2]/10;

num[c2]%=10;

}

}

printf("%d!\n",n);//印出n!

for(l=1999;num[l]==0;l--);//計算要印出的長度

for(c=l;c>=0;c--){//印出

printf("%d",num[c]);

}

printf("\n");

}

#include
#include
using namespace std;
int i;
void chengfa(int s[],int d)
{
 for(int j=0;j  s[j]*=d;
 for(int j=0;j  if(s[j]>=10)
  {
   if(j==i-1)i++;
   if(s[j+1]<0)s[j+1]=0;
   s[j+1]+=s[j]/10;
   s[j]%=10;
  }
  else if(s[j]<0)s[j]=-1;
}
void jiecheng(int z[],int k)
{
 for(int i=1;i}
int main()
{
 int s;
 while(cin>>s)
 {
  cout<  int a[100000],z=s;
  for(i=0;i<99999;i++)a[i]=-1;
  i=0;
  while(s>0)
  {
   a[i]=s%10;
   i++;
   s/=10;
  }
  jiecheng(a,z);
  for(;a[i]<0;i--);
  for(;i>=0;i--)printf("%d",a[i]);
  cout< }
 return 0;
}

0.4s的

似乎位数太少了……

希望你看得懂



 
ZeroJudge Forum