[GESP202312 三级] 单位转换

题目描述

小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。小杨只学了长度单位和重量单位,具体来说:长度单位包括千米(km)、米(m)、毫米(mm),它们之间的关系是:1km = 1000m = 1000000mm。重量单位包括千克(kg)、克(g)、毫克(mg),它们之间的关系是:1kg = 1000g = 1000000mg。小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为克。现在,请你帮忙完成单位转换的程序。

输入格式

输入的第一个整数 N,表示题目数量。接下来 N 行,每行一个字符串,表示转换单位的题目,格式为 x单位1 = ?单位2。其中,x 为一个不超过1000的非负整数,单位1和单位2分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且单位1比单位2更大。例如,如果题目需要你将1km转换为mm,则输入为 1km = ?mm。保证1 ≤ N ≤ 1000。

输出格式

输出 N 行,依次输出所有题目的答案,输出时,只需要将输入中的 ? 代入答案,其余部分一字不差地输出即可。由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的 x 是整数,因此答案一定也是整数。例如,如果题目需要你将1km转换为mm,输入为 1km = ?mm,则你需要输出 1km = 1000000mm。

样例

输入数据 1

2
1 km = ? mm
1 m = ? mm

输出数据 1

1 km = 1000000 mm
1 m = 1000 mm

输入数据 2

5
100 m = ? mm
1000 km = ? m
20 kg = ? g
200 g = ? mg
0 kg = ? mg

输出数据 2

100 m = 100000 mm
1000 km = 1000000 m
20 kg = 20000 g
200 g = 200000 mg
0 kg = 0 mg

要完成这个单位转换的程序,我们首先需要定义单位间的转换关系。根据题目描述,我们有以下转换关系:

  • 千米(km)到米(m): 1 km = 1000 m
  • 米(m)到毫米(mm): 1 m = 1000 mm
  • 千克(kg)到克(g): 1 kg = 1000 g
  • 克(g)到毫克(mg): 1 g = 1000 mg

我们就读取字符里面的单位,是别了以后进行转换,代码:

#include <bits/stdc++.h>
using namespace std;

// 函数用于转换单位并打印结果
void Print(const string& unit1, const string& unit2, long long value) {
    long long result;
    if (unit1 == "km" && unit2 == "m") {
        result = value * 1000; // 千米转米
    } else if (unit1 == "km" && unit2 == "mm") {
        result = value * 1000000; // 千米转毫米
    } else if (unit1 == "m" && unit2 == "mm") {
        result = value * 1000; // 米转毫米
    } else if (unit1 == "kg" && unit2 == "g") {
        result = value * 1000; // 千克转克
    } else if (unit1 == "kg" && unit2 == "mg") {
        result = value * 1000000; // 千克转毫克
    } else if (unit1 == "g" && unit2 == "mg") {
        result = value * 1000; // 克转毫克
    } else {
        result = -1; // 非法单位转换
    }

    // 输出结果
    cout << value << " " << unit1 << " = " << result << " " << unit2 << endl;
}

int main() {
    int N;
    scanf("%d", &N); // 读取题目数量
    for (int i = 0; i < N; i++) {
        long long x;
        char unit1[3], unit2[3];
        scanf("%lld %s = ? %s", &x, unit1, unit2); // 读取输入值和单位

        // 转换并输出结果
        Print(string(unit1), string(unit2), x);
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值