GESP2023年12月认证C++三级( 第三部分编程题(2、单位转换))
《单位转换王国大冒险》一、 故事开始数字王国的作业危机在数学王国里住着一个爱学习的小朋友 —— 小杨。这一天老师布置了很多单位转换作业1 km ? mm20 kg ? g100 m ? mm小杨一看题目太多啦于是他说我要用 C 魔法来帮我做作业✨你的任务就是帮助小杨写程序二、 题目要求我们只做大单位变小单位。1、 长度家族它们的关系是1 km 1000 m 1 m 1000 mm所以1 km 1000000 mm2、⚖️ 重量家族它们的关系是1 kg 1000 g 1 g 1000 mg所以1 kg 1000000 mg3、 输入例子2 1 km ? mm 1 m ? mm4、 输出例子1 km 1000000 mm 1 m 1000 mm三、 解题思路1、 第一步先读题目数量2表示有两道题。2、 第二步一题一题读例如1 km ? mm我们要取出数字1原单位km目标单位mm3、 第三步查倍率表我们给每个单位一个“价值”单位值km1000000m1000mm1kg1000000g1000mg14、 第四步计算答案例如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 mm2 计算答案ans x * getValue(a) / getValue(b);例子1 km ? mm变成1 × 1000000 ÷ 1 10000003、 输出格式cout x a ans b;输出1 km 1000000 mm六、 解题小窍门我们把所有单位都先变成最小单位长度都变成 mm重量都变成 mg这叫 统一单位法1、 再来几个例子 例1100 m ? mm计算100 × 1000 100000⚖️ 例2200 g ? mg计算200 × 1000 200000⚖️ 例30 kg ? mg计算0 × 1000000 02、⏱️ 时间复杂度每题只做一次计算O(1)总共 T 题O(T)非常快⚡七、 本题考点✅ 输入多个数据✅ 字符串读取✅ 自定义函数✅ 单位换算✅ 数学计算八、 记忆口诀大单位变小单位数字变大别怕累先变最小再转换程序计算真方便