PAT-進制轉換-A1058 A+B in Hogwarts (20分)

題目描述:ios

  若是你是哈利·波特迷,你會知道魔法世界有它本身的貨幣系統一—就如海格告訴哈利的:「17個銀西可(Sickle)兌一個加隆(Galleon),29個納特(Knut)兌一個西可,很容易」。你的任務是編寫一個程序來計算A+B,其中A和B是按照「Galleon.Sickle.Knut」的標準格式給出的。算法

輸入格式:ide

  輸入兩個數A和B,以該格式:Galleon.Sickle.Knutspa

輸出格式:code

  輸出A+B的結果,以該格式:Galleon.Sickle.Knutblog

樣例:io

  輸入:3.2.1 10.16.27event

  輸出:14.1.28class

思路:stream

  將兩數所有轉換爲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

 

參考-《算法筆記》-胡凡

相關文章
相關標籤/搜索