2012-10-28 265 views
0

這是我的項目歐拉問題編號4.爲什麼我的代碼在運行時會繼續崩潰?

迴文數讀取相同的兩種方式的代碼。由兩個兩位數字產品製成的最大回文數是9009 = 91.99。查找由兩個3位數字產品製成的最大回文數。

但是,我的代碼不會在Visual C++上編譯。它一直在說「訪問衝突」。那麼有人能告訴我爲什麼我的代碼不起作用嗎?如果我的代碼在你的編譯器上工作,它是否給出了正確的答案?

#include <iostream> 
#include <cmath> 
int isitapalindrome(int num); 

int main (void) 
{ 
bool pali = false; 
int a, b, c, d, e = 0; 
for (a = 999; a > 100; a--) 
{ 
    for (b = 999; b > 100; b--) 
    { 
     c = a*b; 
     pali = isitapalindrome(c); 
     if (pali == true) 
     {   
      c > e? c: e;        
      d = c;         
      e = c; 
     } 
     else continue; 
    } 
} 
std::cout<<d<<std::endl; 
system ("pause"); 
return 0; 
} 

int isitapalindrome (int num) 
{ 
bool isit = false; 
int digits[8]; 
int test = num; 
int i, j, palindrome = 0; 

for (i = 0; test >= 0; i++) 
{   
    digits[i] = test%10;    
    test = (test - test%10)/10;  
} 
for (j = 0; i>=j; j++) 
{ 
    palindrome += digits[j] * 10^(i-j); 
} 

if(palindrome = test) 
{ 
    isit = true; 
} 
return isit; 
} 
+2

幾乎肯定訪問數組越界... –

+0

我該如何解決它? –

+1

你似乎認爲'^'是取冪。不是,它是按位異或。 – hammar

回答

1

for (i = 0; test >= 0; i++) 

是一個無限循環,因爲

test = (test - test%10)/10; 

不會讓test負。用test > 0替換環路條件。

+0

謝謝你們,我終於解決了它。 –

相關問題