第18课 趣谈回文数

小海豚的海底探险 | 趣味C++课堂

🎬
课前动画
观看动画,进入回文的奇妙世界
💻
课堂项目
在线代码编辑器,完成回文数查找机
📚
知识点体系
梳理本节课所有知识点,标注重点
✏️
课堂小测
5道单选+3道判断,检验学习成果
🐬

动画制作中,敬请期待!

小海豚小航正在海底探索回文石板的奥秘...
动画完成后将在这里播放,带你一起发现回文的秘密!

💡 你可以先点击"返回主页",进入"课堂项目"开始编程学习!

huiwen_finder.cpp
#include <iostream>
using namespace std;
int main() {
    int a, b, cnt = ; // ①计数器初始值是几?
    cout << "请输入查找范围:";
    cin >> a >> b;
    for(int i = a; i b; i++) { // ②循环条件:i和b是什么关系?
        int n = i; // 用n来翻转(i不变,用于输出)
        int sum = ; // ③翻转结果初始值是几?
        int m = i; // 保存原数(n在循环中会被改变)
        while(n 0) { // ④循环条件:n和0是什么关系?
            sum = sum * + n 10; // ⑤⑥翻转核心:乘以几?用什么取最后一位?
            n = n 10; // ⑦去掉最后一位用什么符号?
        }
        if(sum m) { // ⑧比较条件:翻转结果和原数是什么关系?
            cout << i << endl;
            cnt++;
        }
    }
    cout << "共有" << cnt << "个回文数";
    return 0;
}

🎮 操作按钮

📤 输出结果

// 点击"运行程序"查看输出结果

💡 填空提示

  • ① 计数器cnt从几开始数?(空的瓶子)
  • ② for循环要包含b这个数,用什么符号?
  • ③ 翻转结果sum从几开始?(空的瓶子)
  • ④ n大于几的时候继续循环?
  • ⑤ 翻转时sum要乘以几才能左移一位?
  • ⑥ 用什么符号取n的最后一位?(取余)
  • ⑦ 用什么符号去掉n的最后一位?(整除)
  • ⑧ 翻转结果和原数比较,用什么符号?
📦 模块一:回文数基础概念

1. 回文的定义 重点

回文是指从前往后读和从后往前读完全一样的文字、数字或符号。回文体现了对称美。

"上海自来水来自海上"(正反读一样)

2. 回文数的定义 重点

一个正整数,如果从左向右读和从右向左读都是一样的,就是回文数。

121 ✓ | 123 ✗ | 1001 ✓ | 12321 ✓

3. 回文数的特点

第一位和最后一位相同,第二位和倒数第二位相同,以此类推。一位数都是回文数。

abcba → 第1位=第5位, 第2位=第4位

4. 生活中的回文现象

回文数字、回文文字、回文诗句、回文英语单词、回文日期(如20200202)。

level, deed, racecar, madam
🔄 模块二:数字翻转算法

5. 取余运算 % 重点

n % 10 得到 n 除以10的余数,也就是 n 的最后一位数字。

123 % 10 = 3(最后一位)

6. 整除运算 /

n / 10 得到 n 除以10的商(整数部分),也就是去掉 n 的最后一位。

123 / 10 = 12(去掉最后一位)

7. 数字翻转核心公式 重点

sum = sum * 10 + n % 10。sum*10让之前的数字左移一位,n%10获取新的最后一位,加在一起完成翻转。

sum=3, n=12 → sum=3*10+2=32

8. while循环实现翻转

while(n > 0) { sum=sum*10+n%10; n=n/10; } 当n变为0时,所有位都已翻转完毕。

while(n > 0) { ... }
💻 模块三:循环与回文数判断

9. for循环遍历范围

for(int i=a; i<=b; i++) 遍历范围内每个数,对每个数进行回文数判断。注意条件是i<=b(包含b)。

for(i=a; i<=b; i++) { 判断i }

10. 计数器变量

cnt变量初始化为0,每发现一个回文数就cnt++,循环结束后cnt就是回文数的总个数。

int cnt=0; if(是回文数) cnt++;

11. 回文数判断逻辑 重点

对每个数i,先用n=i复制一份用于翻转,sum=0存储翻转结果,m=i保存原数。while循环翻转n,最后if(sum==m)判断是否是回文数。

翻转n得sum → 比较sum==m → 是则输出+计数

12. 变量跟踪与调试

在循环中用变量跟踪表记录每一步n、sum、m的值变化,帮助理解翻转过程和排查错误。

每轮记录: n | n%10 | sum

🎯 本节课5大重点知识

回文数的定义(正反读完全一样的数)
取余运算%(n%10获取最后一位)
数字翻转核心公式(sum=sum*10+n%10, n/=10)
回文数判断逻辑(翻转后与原数比较,保存原数m)
for循环遍历查找(遍历范围,逐个判断,计数输出)

🎉 答题完成!
0
第1题单选题
以下哪个数字是回文数?

✅ 正确答案:B

121从左往右读是121,从右往左读也是121,正反读完全一样,所以是回文数。123反读是321,1234反读是4321,100反读是001(即1),都不是回文数。

第2题单选题
在数字翻转算法中,n % 10 的作用是什么?

✅ 正确答案:B

% 是取余运算符,n % 10 得到n除以10的余数,也就是n的最后一位数字。例如123 % 10 = 3(最后一位是3)。去掉最后一位用的是 n / 10(整除)。

第3题单选题
bool 类型的变量可以存储什么值?

✅ 正确答案:C

bool类型是布尔类型,只有两个值:true(真)和 false(假)。bool类型通常用于表示"是"或"不是"的判断结果,在if条件判断中经常用到。

第4题单选题(中)
判断回文数时,为什么要用变量 m 保存原数 n?

✅ 正确答案:B

这是回文数判断中最容易出错的地方!在while循环中,n = n / 10 会不断去掉n的最后一位,循环结束后n变成了0。如果直接用sum == n比较,就会变成sum == 0,所有数都会判断为非回文数。所以必须在循环前用m = n保存原数,循环结束后用sum == m比较。

第5题单选题(难)
for(int i = a; i <= b; i++) 这个循环一共执行多少次?(假设a=1, b=100)

✅ 正确答案:B

for循环从i=a开始,到i<=b结束,每次i增加1。当a=1, b=100时,i从1到100,一共执行100次。公式是:执行次数 = b - a + 1 = 100 - 1 + 1 = 100次。注意条件是 i <= b(包含b),如果是 i < b 就只有99次了。

第6题判断题
回文数从前往后读和从后往前读完全一样。

✅ 正确答案:✅ 正确

这正是回文数的定义!一个正整数,如果从左向右读和从右向左读都是一样的,就是回文数。例如121、1001、12321都是回文数。

第7题判断题(中)
数字翻转时,sum = sum * 10 + n % 10 中的 *10 是为了让之前已经翻转的数字左移一位(升高一位)。

✅ 正确答案:✅ 正确

正确!sum * 10 的作用是把之前已经翻转好的数字"左移一位"(升高一位),腾出个位来放新取出来的最后一位。例如sum=3,乘以10变成30,然后加上n%10=2,得到32。这样3就从个位升到了十位,新的2放在了个位,完成翻转。

第8题判断题(难)
一位数(1-9)不是回文数。

✅ 正确答案:❌ 错误

一位数(1-9)都是回文数!因为一位数只有一位数字,从左往右读和从右往左读都是它本身,完全一样。例如5,正读是5,反读也是5,所以5是回文数。在1-100范围内,一位数1-9加上两位数的11,22,...,99,一共18个回文数。