我已经开始使用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的新手......
答案 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