繁体   English   中英

如何找到最接近 integer 的回文数?

[英]How to find the closest palindrome to an integer?

我正在尝试编写一个程序,它可以找到最接近用户输入 integer 的回文

例如:输入 98 -> output 101 输入 1234 -> output 1221

我知道我必须将 integer 转换为字符串并比较两半,但我很难开始编写代码

我将不胜感激任何帮助!

谢谢!

我认为这是一个可以接受的解决方案:


#include <iostream>
#include <string>


int main( )
{
    int num { };

    std::cout << "Enter a number: ";
    std::cin >> num;

    std::string str( std::to_string( num ) );
    size_t sourceDigit { };

    for ( size_t targetDigit = str.length( ) - 1; targetDigit >= str.length( ) / 2; --targetDigit, ++sourceDigit )
    {
        str[ targetDigit ] = str[ sourceDigit ];
    }

    std::cout << "The closest palindrome to " << num << " is " << str << '\n';
}

希望这能解决您的问题。 但请在使用前进行测试。

对于十进制? 还是二进制? 我会先将它转换为字符串,然后同时从前面和后面循环,直到它到达中间,比较字符。

bool isPalindrome(int num)
{
  std::stringstream ss;
  ss << num;
  std::string numStr = ss.str();
  auto from = numStr.begin();
  auto to = std::advance(numstr.end(), -1);
  auto end = numStr.end();
  while (from != end && to != end && to < from) {
    if (*from != *to) {
      return false;
    }
    std::advance(from);
    if (from == to) {
      return true;
    }
    std::advance(to, -1);
  }
  return true;
}

请原谅任何语法错误,我的平板电脑上没有编译器,但任何错误都应该很容易修复。 您也可以使用模数 (num % 10, (num % 100)/10 等),然后您不需要将其转换为字符串,但您必须自己弄清楚。

这只是为了找到回文,但是围绕数字循环并检查每个数字也是微不足道的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM