0

これは、プロジェクト オイラーの問題番号 4 の私のコードです。

回文数はどちらの方法でも同じように読めます。2 つの 2 桁の数の積から作られる最大の回文は 9009 = 91 99 です。2 つの 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 に答える