21xrx.com
2024-11-08 22:23:55 Friday
登录
文章检索 我的文章 写文章
C++实现求解三重回文数的方法
2023-07-07 22:47:39 深夜i     --     --
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都是三重回文数。确定了方法,我们就可以通过编程语言实现它,为我们的生活增添更多乐趣。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复