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 }
View Code

 

参考-《算法笔记》-胡凡

以上是关于PAT-进制转换-A1058 A+B in Hogwarts (20分)的主要内容,如果未能解决你的问题,请参考以下文章

PAT1058:A+B in Hogwarts

pat 1058 A+B in Hogwarts(20 分)

PAT 甲级 1058 A+B in Hogwarts (20 分) (简单题)

PAT1058 A+B in Hogwarts

PAT甲级——A1058 A+B in Hogwarts

PAT (Advanced Level) 1058. A+B in Hogwarts (20)