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

被折叠的 条评论
为什么被折叠?



