【发布时间】:2020-08-15 03:04:16
【问题描述】:
编写程序解决欧拉项目的问题四:找到由两个 2 位数字的乘积构成的最大回文。这是我的代表:
#include <iostream>
int reverseNumber(int testNum)
{
int reversedNum, remainder = 0;
int temp = testNum;
while(temp != 0)
{
remainder = temp % 10;
reversedNum = reversedNum * 10 + remainder;
temp /= 10;
}
return reversedNum;
}
int main()
{
const int MIN = 100;
int numOne = 99;
int product = 0;
for(int numTwo = 10; numTwo < 100; numTwo++)
{
product = numOne * numTwo;
if (reverseNumber(product) == product)
{
int solution = product;
std::cout << solution << '\n';
return 0;
}
}
return 0;
}
我的主要思考过程是 for 循环将遍历从 10 到 99 的每个数字并将其乘以 99。我的预期结果是打印 9009,这是最大的回文数,有 2 个 2 位数。所以我认为这里应该发生的是 for 循环将从 10 变为 99,并且每个循环都应该通过 if 语句的参数来反转数字并查看它是否等于自身。 我确定这不是编译器问题,因为这在不同的编译器之间反复出现。 reverseNumber() 函数每次我测试它时都会返回正确的数字,所以这不应该是问题,但是这个问题只发生在函数涉及逻辑比较时。我的意思是即使我将它设置为一个变量并将该变量放入 if 参数中,问题仍然存在。我很难过。我只是希望这不是什么愚蠢的错误,因为我已经做了几天了。
【问题讨论】:
-
您似乎未初始化变量
reversedNum -
要开始调试此代码,请查看
if语句。它取决于两个值:product的值和reverseNumber(product)的值。所以如果if语句有问题,要么是因为product的值不是你所期望的,要么是因为reverseNumber(product)返回的值不是你所期望的。所以首先要做的是查看reverseNumber(product)返回的值。首先添加一个输出语句,为循环的每次迭代写出product的值和reverseNumber(product)返回的值。
标签: c++ function for-loop if-statement