我的程序似乎正确,但我不知道为什么会有逻辑问题
int main()
{
int r,s=0;
for(int i=10000;i<=998001;i++)
{
while (i>0)
{
r=i%10;
s=s*10+r;
i=i/10;
}
cout<<s<<endl;
}
答案 0 :(得分:0)
您的问题和代码似乎与阿里不符。您已经告诉您需要最大的回文,但是您正在打印每个反向的数字。而且您的代码也有故障。我将列出错误和要进行的相应更改:
i
用作循环计数器变量for
以及要反转的数字。这导致i
在每次反转后都变成0
,因此for
循环永远不会结束。 此修复程序 ...使用另一个变量,例如num
,并在循环开始时将其等同于i
。这样可以确保i
保持不变,并且for
不受限制。long int
代替int
。这样可以避免出现任何异常现象和垃圾数字的机会。s
(和变量)仅在开始时进行初始化。因此,每次您计算一个新的反向数字时,它都会将s
添加到其先前的值。 修复程序:在s
循环开始时将0
初始化为for
,以便为每个i
值重新获得反转。
i
是否等于倒数,即s
我已附上以下代码。我目前正在打印您所检查范围内的最大回文。如果您需要所有回文,只需取消注释注释的cout
行。
代码:
#include <iostream>
using namespace std;
int main()
{
int r, s = 0;
long int num, max = 0;
for(long int i = 10000; i <= 998001; i++)
{
s = 0;
num = i;
while (num > 0)
{
r = num % 10;
s = s * 10 + r;
num = num / 10;
}
if(s == i) {
//cout<<s<<endl; //uncomment this line if you intend to display all palindromes
if(i > max)
max = i;
}
}
cout<<max<<endl;
}