21xrx.com
2025-04-02 05:54:08 Wednesday
文章检索 我的文章 写文章
C++实现对称数生成
2023-07-04 22:01:49 深夜i     27     0
C++ 对称数 生成

对称数是指从左到右和从右到左读起来都相同的数。比如11、121、1221都是对称数。本文将介绍如何使用C++语言实现对称数的生成。

首先,我们需要明确对称数的特点,即它们的中心点是数字,或者是两个数字之间的间隔。例如,121的中心点是数字2,1221的中心点是1和2之间的间隔。

因此,我们可以从中心点开始构造对称数。假设有一位数的中心点为i,则对称数为ii。如果有两位数的中心点为i和j,则对称数为i*10+j和j*10+i。如果有三位数的中心点为i,则对称数为i*100+j*10+i,其中j取值范围为0到9。

根据以上规律,我们可以编写如下C++代码实现对称数的生成:

#include <iostream>
using namespace std;
// 判断是否为对称数
bool isSymmetric(int n) {
  int m = n, d = 0;
  while (m > 0) {
    d = d * 10 + m % 10;
    m /= 10;
  }
  return d == n;
}
// 生成n位数的对称数
void generateSymmetricNum(int n) {
  int start = 1, end = 9;
  for (int i = 1; i < n; i++) {
    start *= 10;
    end = end * 10 + 9;
  }
  for (int i = start; i <= end; i++) {
    if (isSymmetric(i))
      cout << i << " ";
    
    for (int j = 0; j <= 9; j++) {
      int num = i * 10 + j;
      if (isSymmetric(num))
        cout << num << " ";
      
      num = j * start + i;
      if (num > i && isSymmetric(num))
        cout << num << " ";
      
    }
  }
}
int main() {
  int n;
  cout << "请输入对称数位数:";
  cin >> n;
  generateSymmetricNum(n);
  return 0;
}

以上代码中,isSymmetric函数用于判断一个数是否为对称数。generateSymmetricNum函数用于根据位数n生成所有n位的对称数,其中start和end分别表示n位数的最小值和最大值。在循环中,首先判断i是否为对称数,然后尝试在i后面添加一位数字构成新的对称数num,再尝试在i和j之间添加一段数字构成新的对称数num。

最后,我们通过调用generateSymmetricNum函数来生成对称数。用户需要输入对称数的位数。运行程序后,它将生成所有符合条件的对称数,并输出到屏幕上。

总之,在C++语言中,我们可以通过编写简单的程序生成对称数。如果您感兴趣,可以尝试优化上面的代码,使其生成更快更多的对称数。

  
  

评论区