[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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值