




📏《单位转换王国大冒险》
一、🏰 故事开始:数字王国的作业危机
在数学王国里,住着一个爱学习的小朋友 ------ 小杨。👦
这一天,老师布置了很多单位转换作业:
-
1 km = ? mm
-
20 kg = ? g
-
100 m = ? mm
小杨一看,题目太多啦!😵
于是他说:
我要用 C++ 魔法来帮我做作业!✨
你的任务就是帮助小杨写程序!
二、🎯 题目要求
我们只做 大单位变小单位。
1、📏 长度家族
它们的关系是:
1 km = 1000 m
1 m = 1000 mm
所以:
1 km = 1000000 mm
2、⚖️ 重量家族
它们的关系是:
1 kg = 1000 g
1 g = 1000 mg
所以:
1 kg = 1000000 mg
3、📘 输入例子
2
1 km = ? mm
1 m = ? mm
4、📗 输出例子
1 km = 1000000 mm
1 m = 1000 mm
三、🧠 解题思路
1、🌟 第一步:先读题目数量
2
表示有两道题。
2、🌟 第二步:一题一题读
例如:
1 km = ? mm
我们要取出:
-
数字:1
-
原单位:km
-
目标单位:mm
3、🌟 第三步:查倍率表
我们给每个单位一个"价值":
| 单位 | 值 |
|---|---|
| km | 1000000 |
| m | 1000 |
| mm | 1 |
| kg | 1000000 |
| g | 1000 |
| mg | 1 |
4、🌟 第四步:计算答案
例如:
1 km -> mm
计算:
1 × 1000000 ÷ 1 = 1000000
例如:
20 kg -> g
计算:
20 × 1000000 ÷ 1000 = 20000
四、💻 参考程序
#include <iostream>
#include <string>
using namespace std;
// 返回单位对应的倍率
long long getValue(string s)
{
if(s == "km") return 1000000;
if(s == "m") return 1000;
if(s == "mm") return 1;
if(s == "kg") return 1000000;
if(s == "g") return 1000;
if(s == "mg") return 1;
return 1;
}
int main()
{
int T;
cin >> T;
while(T--)
{
long long x;
string a, b, equalSign, questionMark;
cin >> x >> a >> equalSign >> questionMark >> b;
long long ans = x * getValue(a) / getValue(b);
cout << x << " " << a << " = " << ans << " " << b << endl;
}
return 0;
}
五、🪄 程序讲解
1、🎯 读取一整题
输入:
1 km = ? mm
程序读成:
x = 1
a = km
equalSign = =
questionMark = ?
b = mm
2🎯 计算答案
ans = x * getValue(a) / getValue(b);
例子:
1 km = ? mm
变成:
1 × 1000000 ÷ 1
= 1000000
3、🎯 输出格式
cout << x << " " << a << " = " << ans << " " << b;
输出:
1 km = 1000000 mm
六、🌟 解题小窍门:
我们把所有单位都先变成最小单位:
-
长度都变成 mm
-
重量都变成 mg
这叫:
🪄 统一单位法
1、🎁 再来几个例子
📏 例1
100 m = ? mm
计算:
100 × 1000 = 100000
⚖️ 例2
200 g = ? mg
计算:
200 × 1000 = 200000
⚖️ 例3
0 kg = ? mg
计算:
0 × 1000000 = 0
2、⏱️ 时间复杂度
每题只做一次计算:
O(1)
总共 T 题:
O(T)
非常快!⚡
七、🏆 本题考点:
✅ 输入多个数据
✅ 字符串读取
✅ 自定义函数
✅ 单位换算
✅ 数学计算
八、🌟 记忆口诀
大单位变小单位,数字变大别怕累!
先变最小再转换,程序计算真方便!