### 4.1.1 数位分解原理
“小朋友们,想象一下我们在玩一个特别的积木游戏。” 我拿出一套数字积木。
“每个大数字都是由一些小积木搭起来的。比如:
– 1234 = 1000 + 200 + 30 + 4
– 365 = 300 + 60 + 5
– 78 = 70 + 8”
{.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颗,最后会剩下几颗呢?"
{.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得到)"
{.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得到)"
{.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. 我们只要知道有几座完整的超级大楼就行了"
{.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;
}
“`