项目Euler with C ++ - 编译器在100 x 101之后不会处理

时间:2010-11-30 08:25:51

标签: c++

我已经开始使用C ++,并且正在摆弄projecteuler.net上的一些问题。

我在问题#4,这是我的代码:

算法检查数字是否为回文:

bool forwardCheck(long posPal){
long n = posPal;
long rev = 0;
long dig;

    while (posPal > 0){
        dig = posPal % 10;
        rev = rev * 10 + dig;
        posPal = posPal % 10;
    }

    return n == rev;
}

主程序:

int main(){
long palindrome;

cout << "We are finding the largest palindrome made from two 3-digit numbers.\n"
     << "Calculating...\nCalculating...\nDone!\n";

for (long i = 100; i < 1000; i++){
    for (long j = 100; j < 1000; j++){
        long mult = i * j;
            if (forwardCheck(mult)){
                palindrome = mult;
                //testing function above
                cout << mult << " is a palindrome!\n";
            } else
                //testing function above
                cout << mult << " is not a palindrome...\n";
    }
}


cout << "The largest palindrome composed of two 3 digit numbers is: " << palindrome
     << endl;

return 0;
}

我在OS X上使用X11作为我的g ++编译器,我的问题是,使用上面的代码,数字达到101,000作为倍数,然后在此之后停止并停止。我的问题是:

为什么这样做?我接近这个效率低下吗?

我意识到另一个选择是从long = 999开始并向下迭代但是我编码但是在“完成”之后它被卡住了。声明(是的,我知道在算法运行之前对它进行编程有点雄心勃勃,但我喜欢乐观。:)

卡住和停止,我的意思是CPU使用率激增,但没有任何内容写入控制台。

作为一般性的注意事项:

有没有办法可以通过控制台进行调试,也就是让它告诉我它在windows命令提示符下的回音类似于什么?我也是OS X的新手......

2 个答案:

答案 0 :(得分:2)

看一下这段代码:

  while (posPal > 0){
    dig = posPal % 10;
    rev = rev * 10 + dig;
    posPal = posPal % 10;
  }

我认为你错误地计算了循环底部的posPal

尝试替换为posPal = posPal / 10

答案 1 :(得分:1)

似乎应该如此 posPal = posPal / 10

e.g。从123开始,您希望使用3来构建倒数并移动到12