0

这是我的项目欧拉问题编号 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;
}
4

1 回答 1

1

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

是一个无限循环,因为

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

永远不会test否定。用 替换循环条件test > 0

于 2012-10-29T00:52:17.540 回答