[PAT-A 1058]A+B in Hogwarts

在这里插入图片描述
题目大意:
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(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;
}
发布了101 篇原创文章 · 获赞 1 · 访问量 3035

猜你喜欢

转载自blog.csdn.net/weixin_44699689/article/details/103985385