问题
1058 A+B in Hogwarts (20 分)
If you are a fan of Harry Potter, you would know the world of magic has its own currency system – as Hagrid explained it to Harry, “Seventeen silver Sickles to a Galleon and twenty-nine Knuts to a Sickle, it’s easy enough.” Your job is to write a program to compute A+B where A and B are given in the standard form of Galleon.Sickle.Knut (Galleon is an integer in [0,10
7
], Sickle is an integer in [0, 17), and Knut is an integer in [0, 29)).
Input Specification:
Each input file contains one test case which occupies a line with A and B in the standard form, separated by one space.
Output Specification:
For each test case you should output the sum of A and B in one line, with the same format as the input.
Sample Input:
3.2.1 10.16.27
结尾无空行
Sample Output:
14.1.28
思路
结构体先存储一个点分进制数,然后遍历另一个点分进制数,从低位往高位相加,注意进位。更新结构体,最后输出即可。
代码
#include <bits/stdc++.h>
using namespace std;
struct node{
int Galleon;
int Sickle;
int Knut;
};
int main() {
node temp;
int G,S,K;
scanf("%d.%d.%d",&G,&S,&K);
temp.Galleon = G;
temp.Sickle = S;
temp.Knut = K;
int G1,S1,K1;
getchar();
scanf("%d.%d.%d",&G1,&S1,&K1);
temp.Knut = temp.Knut+K1;
if(temp.Knut>28){
temp.Knut = temp.Knut%29;
temp.Sickle++;
if(temp.Sickle>16){
temp.Sickle = temp.Sickle%17;
temp.Galleon++;
}
}
temp.Sickle = temp.Sickle + S1;
if(temp.Sickle>16){
temp.Sickle = temp.Sickle%17;
temp.Galleon++;
}
temp.Galleon = temp.Galleon + G1;
cout<<temp.Galleon<<"."<<temp.Sickle<<"."<<temp.Knut<<endl;
return 0;
}
总结
相加就是,达到进制后往高位进一,此时应该考虑高位是否也要往更高位进位。