返回 课程

模板 信奥AC之路(第一级)

0% 完成
0/0 步骤
  1. 第一课 开发环境与基础输出
    4 主题|小节
  2. 第二课 算数运算符
    6 主题|小节
  3. 第三课 输入与运算
    3 主题|小节
  4. 第四课 数值操作
    4 主题|小节
  5. 第五课 表达式与运算符
    3 主题|小节
  6. 第六课 三目运算与双分支(缺导语+本课目标)
    2 主题|小节
  7. 第七课 多分支结构(缺导语+本课目标)
    1 主题|小节
  8. 第八课 多if语句
    1 主题|小节
  9. 第九课 三种分支结构的比较
    1 主题|小节
  10. 第十课 巩固学习分支结构
    1 主题|小节
  11. 第十一课 switch与复合语句
    3 主题|小节
  12. 第十二课 while循环
    2 主题|小节
  13. 第十三课 while循环的简单条件输出
    1 主题|小节
  14. 第十四课 while循环的输入序列处理
    1 主题|小节
  15. 第十五课 while循环的复杂条件输出
    2 主题|小节
  16. 第十六课 while循环与数据统计
    1 主题|小节
  17. 第十七课 for循环结构
    3 主题|小节
  18. 第十八课 for循环的输入序列处理)
    1 主题|小节
  19. 第十九课 深入探索for循环
    2 主题|小节
  20. 第二十课 三种循环的对比
    2 主题|小节
  21. 第二十一课 程序调试(一)
    3 主题|小节
  22. 第二十二课 调试工具的使用
    2 主题|小节
  23. 第二十三课 综合复习
    2 主题|小节
  24. 第二十四课 学习评估
    1 主题|小节
课 4, 主题|小节 1
进行中

4.1 拆位运算基础

2025年4月20日
课 进展
0% 完成

### 4.1.1 数位分解原理

“小朋友们,想象一下我们在玩一个特别的积木游戏。” 我拿出一套数字积木。

“每个大数字都是由一些小积木搭起来的。比如:

– 1234 = 1000 + 200 + 30 + 4
– 365 = 300 + 60 + 5
– 78 = 70 + 8”

![4-1数字分解积木](/wp-content/uploads/2025/01/4-1数字分解积木.jpg){.alignnone}

🔬 **实验一:认识数位**

“`cpp
#include
using namespace std;

int main() {
int number = 1234; // 我们的百宝箱

cout << "让我们来拆解这个神奇的数字:" << endl;
cout << number << " = 1000 + 200 + 30 + 4" << endl;
cout << "它是由四颗宝石组成的:" << endl;
cout << "红宝石(千位):1" << endl;
cout << "蓝宝石(百位):2" << endl;
cout << "绿宝石(十位):3" << endl;
cout << "紫宝石(个位):4" << endl;

return 0;
}
“`

### 4.1.2 取个位数的方法

"现在,让我们学习第一个魔法:取出最底层的紫宝石!" 我笑着说。

"这就像分糖果一样有趣。假设我有13颗糖果,要分给10个小朋友,每人分1颗,最后会剩下几颗呢?"

![4-1分糖果示意图](/wp-content/uploads/2025/01/4-1分糖果示意图.jpg){.alignnone}

🔬 **实验二:分糖果游戏**

“`cpp
#include
using namespace std;

int main() {
cout << "=== 神奇的分糖果游戏 ===" << endl;

int candies = 13;
cout << "我有" << candies << "颗糖果" << endl;
cout << "分给10个小朋友后…" << endl;
int leftover = candies % 10;
cout << "剩下" << leftover << "颗糖果" << endl;

cout << "\n=== 现在让我们取出数字的个位 ===" << endl;
int number = 1234;
int ones = number % 10;
cout << "数字" << number << "的最底层紫宝石是:" << ones << endl;

return 0;
}
“`

### 4.1.3 取十位数的方法

"接下来,我们要施展第二个魔法:取出第二层的绿宝石!" 我拿出一副扑克牌。

"想象我们在整理扑克牌。如果有23张牌,每10张放一叠,那么:

1. 首先可以放2叠(用/10得到)
2. 然后剩下3张(用%10得到)"

![4-1扑克牌分组图](/wp-content/uploads/2025/01/4-1扑克牌分组图.jpg){.alignnone}

🔬 **实验三:扑克牌游戏**

“`cpp
#include
using namespace std;

int main() {
cout << "=== 扑克牌分组游戏 ===" << endl;

int cards = 234; // 234张扑克牌
cout << "有" << cards << "张扑克牌" << endl;

// 第一步:计算有多少完整的十张叠
cout << "\n第一步:除以10" << endl;
int tens_pile = cards / 10; // 23叠
cout << "可以叠" << tens_pile << "沓完整的牌" << endl;

// 第二步:从23中取出个位
cout << "\n第二步:取出十位数" << endl;
int tens = tens_pile % 10; // 3
cout << "十位数是:" << tens << endl;

// 一步到位的写法
cout << "\n=== 简单的写法 ===" << endl;
int quick_tens = (cards / 10) % 10;
cout << "十位数是:" << quick_tens << endl;
}
“`

### 4.1.4 取百位数的方法

"接下来,我们要施展第三个魔法:取出第三层的蓝宝石!" 我拿出一叠彩色积木。

"想象我们在搭建一座积木城堡。如果有234块积木:

1. 每100块可以搭一座城堡(用/100得到)
2. 剩下的积木可以搭小房子(用%100得到)
3. 我们只需要知道能搭几座完整的城堡(用%10得到)"

![4-1积木城堡](/wp-content/uploads/2025/01/4-1积木城堡.jpg){.alignnone}

🔬 **实验四:积木城堡游戏**

“`cpp
#include
using namespace std;

int main() {
cout << "=== 积木城堡游戏 ===" << endl;

int blocks = 1234;
cout << "有" << blocks << "块积木" << endl;

// 第一步:计算有多少组100块
cout << "\n第一步:除以100" << endl;
int hundreds_group = blocks / 100; // 得到12
cout << "可以搭" << hundreds_group << "组完整的城堡" << endl;

// 第二步:从12中取出个位
cout << "\n第二步:取出百位数" << endl;
int hundreds = hundreds_group % 10; // 得到2
cout << "百位数是:" << hundreds << endl;

// 一步到位的写法
cout << "\n=== 简单的写法 ===" << endl;
int quick_hundreds = (blocks / 100) % 10;
cout << "百位数是:" << quick_hundreds << endl;
}
“`

### 4.1.5 取千位数的方法

"最后,让我们学习第四个魔法:取出最顶层的红宝石!" 我拿出一个大型积木模型。

"想象我们在建造一座摩天大楼。如果有1234层:

1. 每1000层是一个超级大楼(用/1000得到)
2. 我们只要知道有几座完整的超级大楼就行了"

![4-1摩天大楼](/wp-content/uploads/2025/01/4-1摩天大楼.jpg){.alignnone}

🔬 **实验五:摩天大楼游戏**

“`cpp
#include
using namespace std;

int main() {
cout << "=== 摩天大楼游戏 ===" << endl;

int floors = 1234;
cout << "这座大楼有" << floors << "层" << endl;

// 直接除以1000
cout << "\n取出千位数" << endl;
int thousands = floors / 1000; // 得到1
cout << "千位数是:" << thousands << endl;

// 完整演示
cout << "\n=== 让我们看看每一位数字 ===" << endl;
cout << "千位(红宝石):" << thousands << endl;
cout << "百位(蓝宝石):" << (floors / 100) % 10 << endl;
cout << "十位(绿宝石):" << (floors / 10) % 10 << endl;
cout << "个位(紫宝石):" << floors % 10 << endl;
}
“`

### 4.1.6 拆位小结

"让我们来总结一下取出各位数字的魔法口诀:

– 取个位:number % 10
– 取十位:(number / 10) % 10
– 取百位:(number / 100) % 10
– 取千位:number / 1000"

🔬 **实验六:完整拆分示例**

“`cpp
#include
using namespace std;

int main() {
cout << "=== 数字拆分大魔术 ===" << endl;

int number = 1234;
cout << "神奇数字:" << number << endl;

// 依次取出每一位
int ge = number % 10; // 取个位
int shi = (number / 10) % 10; // 取十位
int bai = (number / 100) % 10; // 取百位
int qian = number / 1000; // 取千位

// 展示结果
cout << "\n=== 魔术揭晓 ===" << endl;
cout << "千位的红宝石是:" << qian << endl;
cout << "百位的蓝宝石是:" << bai << endl;
cout << "十位的绿宝石是:" << shi << endl;
cout << "个位的紫宝石是:" << ge << endl;

// 验证结果
cout << "\n=== 验证魔术 ===" << endl;
int rebuild = qian * 1000 + bai * 100 + shi * 10 + ge;
cout << "重新组合:" << rebuild << endl;
cout << "原始数字:" << number << endl;
}
“`