为什么我的代码在运行时继续崩溃?

时间:2012-10-28 23:42:04

标签: c++ visual-c++

这是我的项目euler问题编号4的代码。

  

回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是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;
}

1 个答案:

答案 0 :(得分:1)

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

是一个无限循环,因为

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

永远不会让test为负面。用test > 0替换循环条件。