题目描述
记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。
每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。
要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃。
元和分的换算关系都是1:100,如下:
1CNY=100fen(1元=100分)
1HKD=100cents(1港元=100港分)
1JPY=100sen(1日元=100仙)
1EUR=100eurocents(1欧元=100欧分)
1GBP=100pence(1英镑=100便士)
汇率表如下:
CNY | JPY | HKD | EUR | GBP |
100 | 1825 | 123 | 14 | 12 |
即:100CNY = 1825JPY = 123HKD = 14EUR = 12GBP
输入描述
第一行输入为N,N表示记录数。0<N<100
之后N行,每行表示一条货币记录,且该行只会是一种货币。
输出描述
将每行货币转换成人民币分(fen)后汇总求和,只保留整数部分。
输出格式只有整数数字,不带小数,不带单位。
用例
输入 | 1 100CNY |
输出 | 10000 |
说明 | 100CNY转换后是10000fen,所以输出结果为10000 |
输入 | 1 3000fen |
输出 | 3000 |
说明 | 3000fen,结果就是3000 |
输入 | 1 123HKD |
输出 | 10000 |
说明 | HKD与CNY的汇率关系是123:100,所以换算后,输出结果为10000 |
输入 | 2 20CNY53fen 53HKD87cents |
输出 | 6432 |
说明 | 20元53分 + 53港元87港分,换算成人民币分后汇总,为6432 |
题目解析
任务描述
我们需要将多种外币转换成人民币的分(fen),并汇总输出。每行记录包含一个外币金额,可能是单独的整数部分(例如100CNY),或者整数与分的组合(例如20CNY53fen)。最终结果只保留整数部分,输出不带单位。
汇率
- 1 CNY = 100 fen
- 1 HKD = 100 cents
- 1 JPY = 100 sen
- 1 EUR = 100 eurocents
- 1 GBP = 100 pence
汇率转换关系为:
- 100 CNY = 1825 JPY
- 100 CNY = 123 HKD
- 100 CNY = 14 EUR
- 100 CNY = 12 GBP
输入
- 第一行包含一个整数 N,表示记录数。
- 接下来的 N 行,每行是一条货币记录,目标货币只会是一种货币。
输出
将每行货币转换成人民币分(fen)后汇总求和,只保留整数部分。输出结果只有整数数字,不带小数、不带单位。
解题思路
- 解析输入:读取每条货币记录,并解析其金额和单位。
- 转换汇率:根据汇率将外币转换为人民币分(fen)。
- 汇总结果:累加所有记录的人民币分(fen),并输出结果。
示例
输入:
2
20CNY53fen
53HKD87cents
输出:
6432
解释:
- 20CNY53fen 转换为人民币分是 2053 fen
- 53HKD87cents 转换为人民币分是 4379 fen
- 最终结果为 2053 + 4379 = 6432 fen
C++代码实现
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// 汇率常量定义
const double JPY_TO_CNY = 100.0 / 1825.0;
const double HKD_TO_CNY = 100.0 / 123.0;
const double EUR_TO_CNY = 100.0 / 14.0;
const double GBP_TO_CNY = 100.0 / 12.0;
int main() {
int N;
cin >> N;
cin.ignore(); // 忽略换行符
int totalFen = 0;
for (int i = 0; i < N; ++i) {
string line;
getline(cin, line);
int cny = 0, fen = 0;
double conversionRate = 1.0;
// 检查货币类型并提取数值
if (line.find("CNY") != string::npos) {
size_t pos = line.find("CNY");
cny = stoi(line.substr(0, pos));
line = line.substr(pos + 3);
if (line.find("fen") != string::npos) {
pos = line.find("fen");
fen = stoi(line.substr(0, pos));
}
} else if (line.find("HKD") != string::npos) {
conversionRate = HKD_TO_CNY;
size_t pos = line.find("HKD");
cny = stoi(line.substr(0, pos));
line = line.substr(pos + 3);
if (line.find("cents") != string::npos) {
pos = line.find("cents");
fen = stoi(line.substr(0, pos));
}
} else if (line.find("JPY") != string::npos) {
conversionRate = JPY_TO_CNY;
size_t pos = line.find("JPY");
cny = stoi(line.substr(0, pos));
line = line.substr(pos + 3);
if (line.find("sen") != string::npos) {
pos = line.find("sen");
fen = stoi(line.substr(0, pos));
}
} else if (line.find("EUR") != string::npos) {
conversionRate = EUR_TO_CNY;
size_t pos = line.find("EUR");
cny = stoi(line.substr(0, pos));
line = line.substr(pos + 3);
if (line.find("eurocents") != string::npos) {
pos = line.find("eurocents");
fen = stoi(line.substr(0, pos));
}
} else if (line.find("GBP") != string::npos) {
conversionRate = GBP_TO_CNY;
size_t pos = line.find("GBP");
cny = stoi(line.substr(0, pos));
line = line.substr(pos + 3);
if (line.find("pence") != string::npos) {
pos = line.find("pence");
fen = stoi(line.substr(0, pos));
}
}
// 转换为人民币分
int totalCNYFen = cny * 100 + fen;
int totalRMBFen = totalCNYFen * conversionRate;
totalFen += totalRMBFen;
}
// 输出结果
cout << totalFen << endl;
return 0;
}
代码说明
- 汇率常量定义:定义外币与人民币的汇率常量。
- 解析输入:读取输入行数N,并逐行解析每条货币记录,提取金额和单位。
- 转换汇率:根据提取的金额和汇率常量,将外币转换为人民币分(fen)。
- 汇总结果:累加所有记录转换后的人民币分(fen),并输出最终结果。
python代码实现
def convert_currency_to_fen(currency_record):
# 汇率常量定义
JPY_TO_CNY = 100 / 1825
HKD_TO_CNY = 100 / 123
EUR_TO_CNY = 100 / 14
GBP_TO_CNY = 100 / 12
cny = 0
fen = 0
conversion_rate = 1.0
if "CNY" in currency_record:
parts = currency_record.split("CNY")
cny = int(parts[0])
if "fen" in parts[1]:
fen = int(parts[1].split("fen")[0])
elif "HKD" in currency_record:
conversion_rate = HKD_TO_CNY
parts = currency_record.split("HKD")
cny = int(parts[0])
if "cents" in parts[1]:
fen = int(parts[1].split("cents")[0])
elif "JPY" in currency_record:
conversion_rate = JPY_TO_CNY
parts = currency_record.split("JPY")
cny = int(parts[0])
if "sen" in parts[1]:
fen = int(parts[1].split("sen")[0])
elif "EUR" in currency_record:
conversion_rate = EUR_TO_CNY
parts = currency_record.split("EUR")
cny = int(parts[0])
if "eurocents" in parts[1]:
fen = int(parts[1].split("eurocents")[0])
elif "GBP" in currency_record:
conversion_rate = GBP_TO_CNY
parts = currency_record.split("GBP")
cny = int(parts[0])
if "pence" in parts[1]:
fen = int(parts[1].split("pence")[0])
total_fen = (cny * 100 + fen) * conversion_rate
return int(total_fen)
# 读取输入
N = int(input().strip())
total_fen = 0
for _ in range(N):
currency_record = input().strip()
total_fen += convert_currency_to_fen(currency_record)
# 输出结果
print(total_fen)
代码说明
- convert_currency_to_fen函数:该函数处理单个货币记录字符串,提取金额并转换为人民币分(fen)。
- 汇率常量定义:定义外币与人民币的汇率常量。
- 解析输入:读取输入的记录数 NNN 及每条货币记录,并调用
convert_currency_to_fen
函数进行转换。 - 汇总结果:累加所有记录转换后的人民币分(fen),并输出最终结果。