题解
2026-02-26 12:49:32
发布于:浙江
1阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入整数 表示题目数量。接下来 行,每行为一个字符串,格式固定为
x 单位1 = ? 单位2,其中x为待转换数值(),单位1和单位2为单位缩写(同属于长度或重量单位,且单位1>单位2)。输出 行,将?替换为计算后的整数结果,其余部分原样输出。 - 数据范围:,。由于最大转换倍数为 (如 km 到 mm),最大结果为 ,需使用 64 位整数防止溢出。
- 复杂度要求:每行处理为 的字符串比较与乘法运算,总复杂度 ,可忽略。
- 算法知识点:
字符串输入处理、条件分支、单位换算、long long 类型使用
思路解析
- 解析输入结构:利用
cin按空白字符分割的特性,顺序读取数值num1、原单位base1、等号(用临时变量s吸收)、问号(再用s吸收)、目标单位base2。这样可以忽略固定格式的符号,直接提取关键信息。 - 确定转换倍数:由于题目保证总是从大单位转换为小单位,且进制固定为 ,只需判断单位组合的层级差:
- 跨两级(如
km→mm或kg→mg):倍数 - 跨一级(如
km→m,m→mm,kg→g,g→mg):倍数
通过if-else if链判断base1和base2的具体值,计算num2 = num1 * 倍数。
- 跨两级(如
- 格式化输出:使用
printf按原格式输出,注意将long long类型数值以%lld格式打印,并将string类型单位通过.c_str()转为 C 风格字符串。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
string base1, base2, s; // s用于吸收"="和"?"两个占位符
long long num1, num2;
// 按空格分割读取:数值 单位1 = ? 单位2
cin >> num1 >> base1 >> s >> s >> base2;
// 长度单位转换:进制为1000
if (base1 == "km" && base2 == "m")
num2 = 1000 * num1;
else if (base1 == "km" && base2 == "mm")
num2 = 1000 * 1000 * num1; // 跨两级
else if (base1 == "m" && base2 == "mm")
num2 = 1000 * num1;
// 重量单位转换:进制同样为1000
if (base1 == "kg" && base2 == "g")
num2 = 1000 * num1;
else if (base1 == "kg" && base2 == "mg")
num2 = 1000 * 1000 * num1; // 跨两级
else if (base1 == "g" && base2 == "mg")
num2 = 1000 * num1;
// 注意:原样输出格式,%lld对应long long,.c_str()转换string
printf("%lld %s = %lld %s\n", num1, base1.c_str(), num2, base2.c_str());
}
return 0;
}
这里空空如也

有帮助,赞一个