货币单位换算

题目描述

记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。

每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。

要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃。

元和分的换算关系都是1:100,如下:

1CNY=100fen(1元=100分)

1HKD=100cents(1港元=100港分)

1JPY=100sen(1日元=100仙)

1EUR=100eurocents(1欧元=100欧分)

1GBP=100pence(1英镑=100便士)

汇率表如下:

CNYJPYHKDEURGBP
10018251231412

即:100CNY = 1825JPY = 123HKD = 14EUR = 12GBP

输入描述

第一行输入为N,N表示记录数。0<N<100

之后N行,每行表示一条货币记录,且该行只会是一种货币。

输出描述

将每行货币转换成人民币分(fen)后汇总求和,只保留整数部分。

输出格式只有整数数字,不带小数,不带单位。

用例1

输入

1
100CNY

Copy

输出

10000

Copy

说明

100CNY转换后是10000fen,所以输出结果为10000

用例2

输入

1
3000fen

Copy

输出

3000

Copy

说明

3000fen,结果就是3000

用例3

输入

1
123HKD

Copy

输出

10000

Copy

说明

HKD与CNY的汇率关系是123:100,所以换算后,输出结果为10000

用例4

输入

2
20CNY53fen
53HKD87cents

Copy

输出

6432

Copy

说明

20元53分 + 53港元87港分,换算成人民币分后汇总,为6432

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;

int getResult(const vector<string>& arr) {

    //无论传进来的货币单位是什么都转成人民币的分
    unordered_map<string, double> exchange;
    exchange["CNY"] = 100.0; //1元=100分
    exchange["JPY"] = 100.0 / 1825 * 100; //1日元 = 多少仙
    exchange["HKD"] = 100.0 / 123 * 100; //1港币= 多少港分
    exchange["EUR"] = 100.0 / 14 * 100; //1欧元= 多少欧分
    exchange["GBP"] = 100.0 / 12 * 100; //1英镑= 英分
    exchange["fen"] = 1.0; //1分=多少分
    exchange["cents"] = 100.0 / 123; //1港分= 多少分
    exchange["sen"] = 100.0 / 1825; //1日分= 多少分
    exchange["eurocents"] = 100.0 / 14; //1欧分 = 多少分
    exchange["pence"] = 100.0 / 12; //英分= 多少分

    //存最终结果
    double ans = 0.0;

    //不论是几行货币输入都要转成最后的一个以分为单位的数字 所以拼接成一个字符串就行
    string str;
    for (const auto& s : arr) str += s;
    str += "0";
    cout<<str<<endl;

    string num;//存数字
    string unit;//存货币单位

    for (char c : str) {

        if (c >= '0' && c <= '9') {
            //有单位则将num转为整型 并进行换算
            if (!unit.empty()) {
                //不断累加最终结果数字
                ans += stoi(num) * exchange[unit];
                num = "";
                unit = "";
            }
            //无单位则只拼接数字
            num += c;
        }
        else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            //是字母就拼接unit(单位)
            unit += c;
        }
    }

    return static_cast<int>(ans);
}

int main() {
    int n;
    cin >> n;

    vector<string> arr(n);

    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }
    
    cout << getResult(arr) << endl;
    return 0;
}

 

华为OD-货币单位换算通常是在处理涉及货币计算的业务场景时,需要将一种货币转换成另一种货币。在Go语言中,你可以使用标准库`math/big`来进行大数计算,并结合第三方库如`github.com/rivo/xstrings`进行字符串操作,如果涉及到实时汇率,可能还需要API调用获取实时数据。 以下是一个简单的示例,展示如何创建一个函数来换算两个货币之间的价值: ```go package main import ( "fmt" "golang.org/x/text/currency" "golang.org/x/text/language" "golang.org/x/text/number/amount" ) func CurrencyConverter(amount float64, fromCurrency string, toCurrency string) (float64, error) { // 使用golang.org/x/text包处理货币格式和汇率 currencies := currency.Tagged(map[string]currency.Name{ "USD": "USD", // 示例:美元 "CNY": "CNH", // 示例:离岸人民币 }) // 其他货币可以添加到这个map中 from, err := currencies Tag(fromCurrency) if err != nil { return 0, err } to, _ := currencies Tag(toCurrency) // 假设汇率API返回了当前的汇率,这里仅做示例 rate := 6.5 // 从USD到CNY的假设汇率 result := amount.New(float64(amount), from).Quantize(0, amount.TruncatingMode(RoundHalfEven)) // 货币金额四舍五入 converted := result.Mul(rate).To(to) return converted.Value(), nil } func main() { // 示例:将100美元转换为中国人民币 convertedAmount, err := CurrencyConverter(100, "USD", "CNY") if err != nil { fmt.Println("Error:", err) } else { fmt.Printf("100 USD is equivalent to %.2f CNY\n", convertedAmount) } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值