魔法世界有它自己的货币系统:十七个银西可(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 解法中的减法换为了加法。
#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;
}
#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;
}