Skip to content

Latest commit

 

History

History
66 lines (55 loc) · 1.8 KB

1058. A+B in Hogwarts.md

File metadata and controls

66 lines (55 loc) · 1.8 KB

【PAT A-1058】A+B in Hogwarts

题意概述

魔法世界有它自己的货币系统:十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可。给定魔法世界货币系统的两个价格 A 和 B,计算 A+B。

输入输出格式

输入在 1 行中分别给出 A 和 B,格式为Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是$\left[{0,10}^7\right]$区间内的整数,Sickle 是$\left[0,17\right)$区间内的整数,Knut 是$\left[0,29\right)$区间内的整数。

在一行中用与输入同样的格式输出 A+B。

算法设计

本题的解法和 PAT B-1037 的解法一致,只不过将 PAT B-1037 解法中的减法换为了加法。

C++代码 1

#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    gg g1, s1, k1, g2, s2, k2;
    char c;  //读取小数点
    cin >> g1 >> c >> s1 >> c >> k1 >> g2 >> c >> s2 >> c >> k2;
    //将输入数据统一转换到最小单位
    gg t1 = (g1 * 17 + s1) * 29 + k1, t2 = (g2 * 17 + s2) * 29 + k2;
    t2 += t1;
    cout << t2 / 29 / 17 << '.' << abs(t2) / 29 % 17 << '.' << abs(t2) % 29;
    return 0;
}

C++代码 2

#include <bits/stdc++.h>
using namespace std;
using gg = long long;
struct T {
    gg g, s, k;
};
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    T t1, t2;
    char c;  //读取小数点
    cin >> t1.g >> c >> t1.s >> c >> t1.k >> t2.g >> c >> t2.s >> c >> t2.k;
    t1.k += t2.k;
    if (t1.k >= 29) {  //向高位进位
        t1.k -= 29;
        ++t1.s;
    }
    t1.s += t2.s;
    if (t1.s >= 17) {  //向高位进位
        t1.s -= 17;
        ++t1.g;
    }
    t1.g += t2.g;
    cout << t1.g << '.' << t1.s << '.' << t1.k;
    return 0;
}