在C ++中找到由两个3位数字的乘积组成的最大回文

时间:2018-11-18 18:06:05

标签: c++ numbers logic palindrome

我的程序似乎正确,但我不知道为什么会有逻辑问题

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;
}

1 个答案:

答案 0 :(得分:0)

您的问题和代码似乎与阿里不符。您已经告诉您需要最大的回文,但是您正在打印每个反向的数字。而且您的代码也有故障。我将列出错误和要进行的相应更改:

  1. i用作循环计数器变量for以及要反转的数字。这导致i在每次反转后都变成0,因此for循环永远不会结束。 此修复程序 ...使用另一个变量,例如num,并在循环开始时将其等同于i。这样可以确保i保持不变,并且for不受限制。
  2. 使用long int代替int。这样可以避免出现任何异常现象和垃圾数字的机会。
  3. s(和变量)仅在开始时进行初始化。因此,每次您计算一个新的反向数字时,它都会将s添加到其先前的值。 修复程序:s循环开始时将0初始化为for,以便为每个i值重新获得反转。
  4. 您不检查任何回文症状。您只是打印反转的号码。 解决方法:因此检查数字是否为回文数,即,数字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;
}