21xrx.com
2025-03-23 22:53:40 Sunday
文章检索 我的文章 写文章
C++实现求解三重回文数的方法
2023-07-07 22:47:39 深夜i     11     0
C++ 三重回文数 实现 方法

在数学中,回文数是一种非常有趣的数字,它在正向和反向读法都相同。而如果一个数是三重回文数,那么它超级有趣!三重回文数是指一个数在十进制下表现为回文数,并且它的十进制逆序也是回文数,再加上它在二进制下也表现为回文数。

使用C++编程语言求解三重回文数问题是一件非常有趣的事情。为了实现这个问题,我们需要找出一些关键性的步骤。下面是实现三重回文数的步骤:

1. 定义一个变量来表示三重回文数,并初始化为1。

2. 从1开始递增变量,每次增加1。

3. 对递增的变量进行判断,检查该变量是否是十进制下回文数。

4. 如果该变量是十进制下回文数,则检查它的十进制逆序是否也是回文数。

5. 如果该变量的十进制逆序也是回文数,则检查它是否在二进制下也是回文数。

6. 如果它在二进制下也是回文数,则输出该数字。

7. 重复步骤2~6,直到找到所需数量的三重回文数。

实现代码如下:

#include <iostream>
#include <string>
#include <bitset>
using namespace std;
bool isPalindrome(string str) {
  int left = 0, right = str.length() - 1;
  while (left < right) {
    if (str[left] != str[right]) return false;
    left++; right--;
  }
  return true;
}
void printTriplePalindrome(int n) {
  int count = 0, i = 1;
  while (count < n) {
    string strDec = to_string(i);
    if (isPalindrome(strDec)) {
      string strDecReverse = strDec;
      reverse(strDecReverse.begin(), strDecReverse.end());
      if (isPalindrome(strDecReverse)) {
        bitset<32> bset(i);
        string strBin = bset.to_string();
        strBin = strBin.substr(strBin.find_first_not_of('0'));
        if (isPalindrome(strBin)) {
          cout << i << endl;
          count++;
        }
      }
    }
    i++;
  }
}
int main() {
  int n = 5;
  printTriplePalindrome(n);
  return 0;
}

在上面的代码中,我们使用了三个辅助函数isPalindrome、reverse、bitset。

函数isPalindrome用于判断一个字符串是否为回文数。

函数reverse用于将字符串反转。

函数bitset将一个整数转换为二进制,并且转换后的二进制数会在最前面自动填充0以满足指定的大小位数。

运行上面的代码,我们可以得到输出:

1

3

5

7

9

这说明1、3、5、7、9都是三重回文数。确定了方法,我们就可以通过编程语言实现它,为我们的生活增添更多乐趣。

  
  

评论区