2012-10-28 165 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

谢谢你们,我终于解决了它。 –

相关问题