输出:
10000
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
用例四:
输入:
2
20CNY53fen
53HKD87cents
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
输出:
6432
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

python解法

解决步骤:
定义汇率转换表:

题目提供了不同货币到 fen 的汇率,我们需要用字典 rates 存储这些汇率。每种货币对应其兑换成 fen 的比率。例如,1 CNY = 100 fen;1 JPY = 100 / 1825 fen,依此类推。
正则表达式提取货币和金额:

对每条记录使用正则表达式 re.findall 来提取金额和货币。正则表达式 (\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence) 会匹配形如 123CNY、456JPY 这样的字符串,提取出数字部分和货币部分。
汇率转换:

对于每条记录中的所有金额和货币,我们用相应货币的汇率将其转换为 fen。根据汇率将金额乘以汇率,得到该货币的 fen 结果。
求和:

将所有转换成 fen 的金额加起来,得到总金额。
返回结果:

返回总金额并转换为整数。

import re  # 导入正则表达式模块,用于提取金额和货币

def convert_currency_to_fen(records):
    # 定义各个货币与fen的兑换比例
    rates = {
        "CNY": 100,  # 1 CNY = 100 fen
        "JPY": 100 / 1825 * 100,  # 1 JPY = 100 / 1825 * 100 fen
        "HKD": 100 / 123 * 100,  # 1 HKD = 100 / 123 * 100 fen
        "EUR": 100 / 14 * 100,  # 1 EUR = 100 / 14 * 100 fen
        "GBP": 100 / 12 * 100,  # 1 GBP = 100 / 12 * 100 fen
        "fen": 1,  # 1 fen = 1 fen
        "cents": 100 / 123,  # 1 cent = 100 / 123 fen
        "sen": 100 / 1825,  # 1 sen = 100 / 1825 fen
        "eurocents": 100 / 14,  # 1 eurocent = 100 / 14 fen
        "pence": 100 / 12  # 1 pence = 100 / 12 fen
    }

    # 使用正则表达式提取每条记录中的金额和货币类型,并根据汇率转换成fen,计算总和
    total_fen = sum(int(amount) * rates[currency]  # 计算每条记录的fen值
                    for record in records  # 遍历每条记录
                    for amount, currency in re.findall(  # 提取金额和货币
                        r"(\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)", record))  # 匹配金额和货币

    return int(total_fen)  # 返回总金额(取整)

# 读取输入
n = int(input())  # 记录的条数
records = [input() for _ in range(n)]  # 读取每一条记录

# 输出总金额
print(convert_currency_to_fen(records))

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

java解法

解决步骤:
定义汇率转换表:

题目给出了不同货币到 fen 的汇率。我们需要用一个 Map 存储这些汇率。每种货币都对应一个兑换成 fen 的比率。例如,1 CNY = 100 fen;1 JPY = 100 / 1825 fen,依此类推。
正则表达式提取货币和金额:

每条记录中可能包含多个货币及其金额,我们可以使用正则表达式 Pattern 来匹配记录中的金额和货币。通过正则表达式提取出数字部分(金额)和货币部分(如 CNY、JPY 等)。
汇率转换:

对于每条记录中的每一对 (amount, currency),我们根据 rates 中的汇率将金额转换为 fen。然后将所有金额累加得到总金额。
返回结果:

由于结果可能是浮动值,我们将其转换为整数并返回。返回值表示所有货币金额转换为 fen 后的总和。

import java.util.*;
import java.util.regex.*;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象读取输入
        Scanner sc = new Scanner(System.in);
        // 读取记录的条数
        int n = sc.nextInt();
        sc.nextLine();  // 读取换行符

        // 读取所有记录
        String[] rec = new String[n];
        for (int i = 0; i < n; i++) {
            rec[i] = sc.nextLine();
        }

        // 创建货币转换器对象
        CurrencyConverter converter = new CurrencyConverter();
        // 输出转换后的总金额
        System.out.println(converter.convertToFen(rec));
    }
}

class CurrencyConverter {
    private final Map<String, Double> rates;  // 存储货币到fen的汇率
    private final Pattern regex;  // 用于匹配金额和货币的正则表达式

    // 构造函数,初始化汇率表
    public CurrencyConverter() {
        rates = new HashMap<>();
        // 设置各货币与fen的汇率
        rates.put("CNY", 100.0);  // 1 CNY = 100 fen
        rates.put("JPY", 100.0 / 1825 * 100);  // 1 JPY = 100 / 1825 * 100 fen
        rates.put("HKD", 100.0 / 123 * 100);  // 1 HKD = 100 / 123 * 100 fen
        rates.put("EUR", 100.0 / 14 * 100);  // 1 EUR = 100 / 14 * 100 fen
        rates.put("GBP", 100.0 / 12 * 100);  // 1 GBP = 100 / 12 * 100 fen
        rates.put("fen", 1.0);  // 1 fen = 1 fen
        rates.put("cents", 100.0 / 123);  // 1 cent = 100 / 123 fen
        rates.put("sen", 100.0 / 1825);  // 1 sen = 100 / 1825 fen
        rates.put("eurocents", 100.0 / 14);  // 1 eurocent = 100 / 14 fen
        rates.put("pence", 100.0 / 12);  // 1 pence = 100 / 12 fen

        // 定义正则表达式用于匹配货币和金额
        regex = Pattern.compile("(\\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)");
    }

    // 将记录转换为fen并求和
    public int convertToFen(String[] rec) {
        double total = 0;  // 初始化总金额为0

        // 遍历所有记录
        for (String r : rec) {
            Matcher matcher = regex.matcher(r);  // 获取正则匹配器
            while (matcher.find()) {  // 在记录中查找符合条件的金额和货币
                int amount = Integer.parseInt(matcher.group(1));  // 获取金额部分
                String currency = matcher.group(2);  // 获取货币类型
                total += amount * rates.get(currency);  // 累加转换后的fen金额
            }
        }

        return (int) total;  // 返回总金额,转换为整数
    }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C++解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C解法

主要步骤:
读取输入:

先输入一个整数 n,表示记录的数量。
接着读取 n 条记录,每条记录包含一个金额和一个货币单位。
货币单位汇率转换:

根据不同的货币单位(如 CNY、JPY、HKD 等),将金额转换为 fen。汇率通过 getRate 函数获得。
汇率已知,1 CNY = 100 fen,1 JPY = 100/1825 * 100 fen 等。
解析记录:

每条记录中包括一个金额和货币单位。通过遍历记录字符串,将数字部分作为金额,字母部分作为货币单位。
使用 getRate 函数将金额转换为 fen 并累加。
输出结果:

最后,输出转换后的总 fen 数量(取整后输出)。

#include 
#include 
#include 

// 函数:根据货币单位返回相应的汇率,所有的汇率都相对于 fen
double getRate(const char* unt) {
    // 判断输入的货币单位并返回相应的汇率
    if (strcmp(unt, "CNY") == 0)
        return 100.0;  // 1 CNY = 100 fen
    else if (strcmp(unt, "JPY") == 0)
        return 100.0 / 1825 * 100;  // 1 JPY = 100 / 1825 * 100 fen
    else if (strcmp(unt, "HKD") == 0)
        return 100.0 / 123 * 100;  // 1 HKD = 100 / 123 * 100 fen
    else if (strcmp(unt, "EUR") == 0)
        return 100.0 / 14 * 100;  // 1 EUR = 100 / 14 * 100 fen
    else if (strcmp(unt, "GBP") == 0)
        return 100.0 / 12 * 100;  // 1 GBP = 100 / 12 * 100 fen
    else if (strcmp(unt, "fen") == 0)
        return 1.0;  // 1 fen = 1 fen
    else if (strcmp(unt, "cents") == 0)
        return 100.0 / 123;  // 1 cent = 100 / 123 fen
    else if (strcmp(unt, "sen") == 0)
        return 100.0 / 1825;  // 1 sen = 100 / 1825 fen
    else if (strcmp(unt, "eurocents") == 0)
        return 100.0 / 14;  // 1 eurocent = 100 / 14 fen
    else if (strcmp(unt, "pence") == 0)
        return 100.0 / 12;  // 1 pence = 100 / 12 fen
    else
        return 0.0;  // 如果货币单位无法识别,返回0
}

int main() {
    int n;
    scanf("%d", &n);  // 读取记录的数量
    getchar();  // 读取换行符

    double total = 0;  // 用于存储总金额

    // 逐条处理记录
    for (int i = 0; i < n; i++) {
        char rec[100];  // 用于存储一条记录
        fgets(rec, 100, stdin);  // 读取一行记录

        int amt = 0;  // 用于存储金额
        char unt[20] = "";  // 用于存储货币单位
        int len = strlen(rec);  // 获取记录的长度

        // 逐字符遍历记录
        for (int j = 0; j < len; j++) {
            char c = rec[j];

            // 如果是数字字符,则累加到 amt(金额)中
            if (isdigit(c)) {
                amt = amt * 10 + (c - '0');
            }
            // 如果是字母字符,表示货币单位,提取出完整的货币单位
            else if (isalpha(c)) {
                int k = 0;
                while (j < len && isalpha(rec[j])) {  // 提取连续字母组成的货币单位
                    unt[k++] = rec[j++];
                }
                unt[k] = '\0';  // 结束字符

                // 根据提取的货币单位计算金额,并累加到总金额中
                total += amt * getRate(unt);

                amt = 0;  // 重置金额
                unt[0] = '\0';  // 清空货币单位

                j--;  // 回退一位,因为 j 在 while 循环结束后会多进一位
            }
        }
    }

    // 输出总金额(取整后输出)
    printf("%d\n", (int)total);

    return 0;
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

主要步骤:
读取输入:

第一行输入一个整数 n,表示记录的数量。
接着读取 n 条记录,每条记录包含一个金额和货币单位。
货币单位汇率转换:

使用汇率字典 rates 将不同货币单位转换为 fen 单位。
汇率的转换基于给定的货币与 fen 的比例。例如 1 CNY = 100 fen,1 JPY = 100 / 1825 * 100 fen 等。
解析记录:

使用正则表达式从每条记录中提取出金额和货币单位。
根据货币单位从 rates 中查找相应的汇率,将金额转换为 fen 并累加到总和 sum 中。
输出结果:

最后,输出所有记录对应金额的总和,取整后返回

const rl = require("readline").createInterface({
    input: process.stdin,  // 设置标准输入
    output: process.stdout, // 设置标准输出
});

const records = []; // 用于存储输入的记录
rl.on("line", (line) => {
    records.push(line);  // 每次读取一行,保存到 records 数组中
    if (records.length === parseInt(records[0]) + 1) {  // 判断是否已经读入所有记录
        records.shift();  // 移除第一行,它是记录的数量
        console.log(computeTotalFen(records));  // 调用函数计算总金额并输出
        rl.close();  // 关闭输入流
    }
});

// 计算所有记录转换为 fen 后的总金额
function computeTotalFen(entries) {
    // 汇率字典,定义了各个货币单位与 fen 的转换关系
    const rates = {
        CNY: 100,  // CNY 1 = 100 fen
        JPY: (100 / 1825) * 100,  // JPY 1 = 100 / 1825 * 100 fen
        HKD: (100 / 123) * 100,  // HKD 1 = 100 / 123 * 100 fen
        EUR: (100 / 14) * 100,  // EUR 1 = 100 / 14 * 100 fen
        GBP: (100 / 12) * 100,  // GBP 1 = 100 / 12 * 100 fen
        fen: 1,  // fen 1 = 1 fen
        cents: 100 / 123,  // cents 1 = 100 / 123 fen
        sen: 100 / 1825,  // sen 1 = 100 / 1825 fen
        eurocents: 100 / 14,  // eurocents 1 = 100 / 14 fen
        pence: 100 / 12,  // pence 1 = 100 / 12 fen
    };

    // 正则表达式:用于匹配记录中的金额和货币单位
    const currencyPattern = /(\d+)((CNY)|(JPY)|(HKD)|(EUR)|(GBP)|(fen)|(cents)|(sen)|(eurocents)|(pence))/g;
    let sum = 0;  // 用于存储所有金额的总和

    // 遍历每条记录
    for (const record of entries) {
        let result;
        // 使用正则表达式匹配记录中的金额和货币单位
        while ((result = currencyPattern.exec(record)) !== null) {
            const amount = parseInt(result[1]);  // 获取金额部分
            const unit = result[2];  // 获取货币单位
            sum += amount * rates[unit];  // 根据汇率转换并累加到总金额
        }
    }

    // 返回总金额,取整
    return Math.floor(sum);
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/144772954"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!