#3921: 怎麼一直RE


s0983573676 (BlackSpace)


為什麼會一直RE請大家幫幫我吧!!

#include <iostream>
using namespace std;

int main()
{

 int n,tmp;
 while(scanf("%d",&n)!=EOF){
  int a[1500]={0};
  tmp=n;  
  for(int i=2;i<tmp;i++){
   while(n%i==0){
    a[i]++;
    n=n/i;
   }
   if(n==1)
    break;
  }
  int count=-1;
  for(int i=2;i<=1500;i++){
   if(a[i]>0){
    count++;
   }
  }
  if(count==-1){ 
   printf("%d",tmp);
  }
  for(int i=0;i<=1500;i++){
   if(a[i]==1){
    printf("%d",i);
    if(count>0){
     printf(" * ");
     count--;
    }
   }
   if(a[i]>1){
    printf("%d^%d",i,a[i]);
    if(count>0){
     printf(" * ");
     count--;
    }
   }
  }
  printf("\n");
 }
 return 0;
}

 

 

這段程式碼在我的電腦跑都很正常,會何在測試時一直是RE?

#3933: Re:怎麼一直RE


linishan (L)


為什麼會一直RE請大家幫幫我吧!!

#include
using namespace std;

int main()
{

 int n,tmp;
 while(scanf("%d",&n)!=EOF){
  int a[1500]={0};
  tmp=n;  
  for(int i=2;i
   while(n%i==0){
    a[i]++;
    n=n/i;
   }
   if(n==1)
    break;
  }
  int count=-1;
  for(int i=2;i<=1500;i++){
   if(a[i]>0){
    count++;
   }
  }
  if(count==-1){ 
   printf("%d",tmp);
  }
  for(int i=0;i<=1500;i++){
   if(a[i]==1){
    printf("%d",i);
    if(count>0){
     printf(" * ");
     count--;
    }
   }
   if(a[i]>1){
    printf("%d^%d",i,a[i]);
    if(count>0){
     printf(" * ");
     count--;
    }
   }
  }
  printf("\n");
 }
 return 0;
}

 

 

這段程式碼在我的電腦跑都很正常,會何在測試時一直是RE?


1500 意思是 1500個空間

-- > a[0] ~ a[1499] (1499-0+1=1500)

您的程式會存取到 a[1500]  在這邊會發生RE的情況