PAT甲级1058 A+B in Hogwarts

这篇博客探讨了哈利波特小说中的货币体系,并提供了两种不同的编程解决方案来计算两个金额的总和。解法一采用位数进位,解法二通过转换为最小单位进行计算,均能正确处理Galleon、Sickle和Knut之间的进位关系。示例输入和输出展示了算法的正确性。

题目:
哈利波特货币体系,Galleon.Sickle.Knut,计算A+B。其中Galleon属于[0,107],Sickle属于[0,17),Knut属于[0,29)
输入格式:
每个输入文件包含一个测试用例,该测试用例占用一行标准格式的A和B,用一个空格隔开。
输出格式:
对于每个测试用例,您应该以与输入相同的格式在一行中输出A和B的总和。
输入样例:

3.2.1 10.16.27

输出样例:

14.1.28

AC代码:
(解法1:位数进位)

#include<iostream>

using namespace std;

int main(){
	int g1,g2,s1,s2,k1,k2;
	scanf("%d.%d.%d %d.%d.%d",&g1,&s1,&k1,&g2,&s2,&k2);
	int g,s,k,carry=0;
	k=k1+k2;
	if(k>=29){
		carry=k/29;
		k=k%29;
	}
	s=s1+s2+carry;
	carry=0;
	if(s>=17){
		carry=s/17;
		s=s%17;
	}
	g=g1+g2+carry;
	printf("%d.%d.%d\n",g,s,k);
	return 0;
} 

AC代码:
(解法2:化为最小单位计算)

#include<iostream>

using namespace std;

const int G=17*29;
const int S=29;

int main(){
	long long a1,a2;
	int b1,c1,b2,c2;
	scanf("%ld.%d.%d %ld.%d.%d",&a1,&b1,&c1,&a2,&b2,&c2);
	long long a=a1*G+b1*S+c1;
	long long b=a2*G+b2*S+c2;
	long long c=a+b;
	if(c<0){
		printf("-");
		c=-c;
	}
	printf("%ld.%d.%d",c/G,c%G/S,c%S);
	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值