我见过this,但这不是我要找的。 p>
问题是找到最大的回文,这是两个三位数的乘积。
由于我的程序没有工作,所以我做了一点改动,而不是找到最大的回文,这是两个三位数字的乘积我写了程序找到最大的回文,这是两个两位数的乘积
请参阅该计划:
#include <iostream>
using namespace std;
int main() {
int i, j, n, s, m, w;
for (i = 99; i > 9; i--) {
for (j = 99; j > 9; j--)
n = i * j;
s = n;
while (n != 0) {
w = 0;
m = n % 10;
w = w * 10 + m;
n = n / 10;
}
if (s == w)
cout << s << endl;
break;
}
return 0;
}
此程序的问题在于它既没有显示任何错误也没有给出任何结果。
请帮助我在程序中找到问题。
答案 0 :(得分:2)
现在你错过了j循环的花括号。目前的代码正在做99! * i。
然后你必须专注于存储最大的回文值,而不是仅仅将所有这些值打印到屏幕上(这是考虑你的实现,无论如何都不是最有效的)。
答案 1 :(得分:0)
您的代码的某些修改版本:
#include <iostream>
using namespace std;
int main() {
int max_product = 0;
for (int i = 99; i > 9; i--) {
for (int j = i; j > 9; j--) {
int product = i * j;
if (product < max_product)
break;
int number = product;
int reverse = 0;
while (number != 0) {
reverse = reverse * 10 + number % 10;
number /= 10;
}
if (product == reverse && product > max_product) {
max_product = product;
}
}
}
cout << "Solution: " << max_product << endl;
return 0;
}
你有各种各样的问题:
{
,}
。在j
的for循环之后。 j
的for循环执行的唯一指令是:n = i * j;
括号,其余的指令(测试它是否是回文)是不在循环中的。w
要测试回文的数字的反向在0
循环的每次执行中将其值重置为while (n != 0)
,从而导致错误的反向值(并且永远找不到回文)。i = 98
,{{1} }和j = 2
,i = 70
在这种情况下,j = 65
将位于第二个i*j
的第一个解决方案= 196
中,当您找到第一个时,您无法阻止搜索。在使用= 4550
的代码中,请执行我认为您正在等待的内容(停止搜索),只使用实际break
值停止搜索。关于修改后代码的一些注释:
i
进行测试i == 98
以及j == 99
和i == 99
),您可以将j == 98
限制为始终小于或等于j
。i
维持找到的最大回文产品。并且在内循环(max_product
)中使用该信息以便在找不到更好的解决方案时提前退出。