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

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

原文地址:https://www.cnblogs.com/fangzhiyou/p/12405535.html