PAT-进制转换-A1058 A+B in Hogwarts (20分)
Posted fangzhiyou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT-进制转换-A1058 A+B in Hogwarts (20分)相关的知识,希望对你有一定的参考价值。
题目描述:
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统一—就如海格告诉哈利的:“17个银西可(Sickle)兑一个加隆(Galleon),29个纳特(Knut)兑一个西可,很容易”。你的任务是编写一个程序来计算A+B,其中A和B是按照“Galleon.Sickle.Knut”的标准格式给出的。
输入格式:
输入两个数A和B,以该格式:Galleon.Sickle.Knut
输出格式:
输出A+B的结果,以该格式:Galleon.Sickle.Knut
样例:
输入:3.2.1 10.16.27
输出:14.1.28
思路:
将两数全部转换为Knut,然后进行相加得到数res,然后依据题目要求进行输出。
注意点:
将数转换为Knut时,要防止溢出,故将res的类型设置为long。
代码:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 //设置long防止res溢出 7 long res, B_Galleon, B_Sickle, B_Knut, A_Galleon, A_Sickle, A_Knut; 8 9 //读入数据 10 scanf("%ld.%ld.%ld", &A_Galleon, &A_Sickle, &A_Knut); 11 scanf("%ld.%ld.%ld", &B_Galleon, &B_Sickle, &B_Knut); 12 13 //将钱全部转换位Knut,res为long类型防止溢出 14 res = (A_Galleon + B_Galleon) * 17 * 29 + (A_Sickle + B_Sickle) * 29 + (A_Knut + B_Knut); 15 16 //进行输出 17 printf("%ld.%ld.%ld", (res / 29) / 17, (res / 29) % 17, res % 29); 18 19 return 0; 20 }
参考-《算法笔记》-胡凡
以上是关于PAT-进制转换-A1058 A+B in Hogwarts (20分)的主要内容,如果未能解决你的问题,请参考以下文章
pat 1058 A+B in Hogwarts(20 分)