21xrx.com
2024-06-03 06:54:53 Monday
登录
文章检索 我的文章 写文章
C++实现对称数生成
2023-07-04 22:01:49 深夜i     --     --
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++语言中,我们可以通过编写简单的程序生成对称数。如果您感兴趣,可以尝试优化上面的代码,使其生成更快更多的对称数。

  
  

评论区

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