实验内容:找出回文数

打印10~1000之间满足下列条件的所有整数:正序读和反序读都相同,例如:55、232等
提示】inta;判断回文的条件If((a/100==0&&a/10==a%10)||(a/100!=0&&a/100==a%10

基于new bing和自己的理解的编写代码,供参考哈

#include <stdio.h>
#include <stdbool.h>

// 判断一个整数是否是回文数,即正序和反序都相同
bool is_palindrome(int n) {
  int reversed = 0; // 反转后的数
  int original = n; // 原始数
  while (n > 0) {
    // 每次取出最低位,加到反转后的数的最高位
    reversed = reversed * 10 + n % 10;
    // 去掉最低位
    n /= 10;
  }
  // 判断反转后的数和原始数是否相等
  return reversed == original;
}

int main() {
  // 遍历10~1000之间的所有整数
  for (int i = 10; i <= 1000; i++) {
    // 如果是回文数,打印出来
    if (is_palindrome(i)) {
      printf("%d\n", i);
    }
  }
  return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    要让计算机帮您找出10到1000之间所有的回文数,可以先定义一个判断回文数的函数,然后遍历10到1000之间的整数调用该函数即可。

    下面是一个Python的代码示例:

    def is_palindrome(num):
        """判断一个数是否为回文数"""
        return str(num) == str(num)[::-1]
    
    # 遍历10到1000之间的整数,找出回文数
    for i in range(10, 1001):
        if is_palindrome(i):
            print(i)
    

    这个代码中,is_palindrome()函数接受一个数作为参数,将该数转换成字符串后使用字符串切片操作[::-1]得到它的反序字符串,再将原字符串与反序字符串对比,判断该数是否为回文数。

    遍历10到1000之间的整数时,对每个数都调用is_palindrome()函数,找到回文数后输出即可。

    提示中提到了判断回文数的条件,可以根据这个条件进行优化,避免遍历不必要的数。此处给出一个优化后的代码示例:

    def is_palindrome(num):
        """判断一个数是否为回文数"""
        str_num = str(num)
        if len(str_num) == 2:
            return str_num[0] == str_num[1]
        elif len(str_num) == 3:
            return str_num[0] == str_num[2]
    
    # 遍历10到1000之间的整数,找出回文数
    for i in range(11, 1001, 10):
        if i < 100:
            if is_palindrome(i):
                print(i)
        else:
            if is_palindrome(i):
                print(i)
            if is_palindrome(i+1):
                print(i+1)
    

    这个代码中,is_palindrome()函数的实现与之前相似,但它加入了对不同位数的判定。在遍历时,我们只需要遍历10到1000之间的奇数,不需要遍历偶数。对于小于100的数,只需要判断是否为回文数即可;对于大于等于100的数,还要判断加1后是否为回文数,因为它可能是一个偶数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^