题目大意:
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 AB,求A+B 以Galleon.Sickle.Knut格式输出
思路:把Galleon.Sickle.Knut格式换成n个Knut然后相加,最后对和再转换回Galleon.Sickle.Knut格式
计算需要用long long类型,int有case会溢出。
AC代码:
//PAT_A 1058
#include<cstdio>
using namespace std;
const int Knut = 1;
const int Sickle = 29 * Knut;
const int Galleon = 17 * Sickle;
int main() {
long long a1, b1, c1, a2, b2, c2, temp1, temp2, change;
(void)scanf("%lld.%lld.%lld %lld.%lld.%lld", &a1, &b1, &c1, &a2, &b2, &c2);
temp1 = a1 * Galleon + b1 * Sickle + c1 * Knut;
temp2 = a2 * Galleon + b2 * Sickle + c2 * Knut;
change = temp1 + temp2;
printf("%lld.%lld.%lld", change / Galleon, (change % Galleon) / Sickle, change % Sickle);
return 0;
}
类似题目 [PAT-B 1037]
即将A+B换为求A-B,在输出时需要判断正负,计算可以使用int
AC代码
//PAT_B 1037
#include<cstdio>
using namespace std;
const int Knut = 1;
const int Sickle = 29 * Knut;
const int Galleon = 17 * Sickle;
int main() {
int a1, b1, c1, a2, b2, c2, temp1, temp2, change;
(void)scanf("%d.%d.%d %d.%d.%d", &a1, &b1, &c1, &a2, &b2, &c2);
temp1 = a1 * Galleon + b1 * Sickle + c1 * Knut;
temp2 = a2 * Galleon + b2 * Sickle + c2 * Knut;
change = temp2 - temp1;
if (change < 0) {
printf("-");
change *= -1;
}
printf("%d.%d.%d", change / Galleon, (change % Galleon) / Sickle, change % Sickle);
return 0;
}