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, 107], 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 <iostream>
#include <string>
using namespace std;
struct node
{
int G,S,K;
node(){};
node(string str)
{
G=0;
S=0;
K=0;
int i=0,k=0;
while(i<3&&k<str.size())
{
if(str[k]=='.')
{
k++;
i++;
continue;
}
if(i==0)
{
G=G*10+(str[k++]-'0');
continue;
}
if(i==1)
{
S=S*10+(str[k++]-'0');
continue;
}
if(i==2)
{
K=K*10+(str[k++]-'0');
continue;
}
}
}
void add(node b)
{
K+=b.K;
S+=K/29;
K=K%29;
S+=b.S;
G+=S/17;
S=S%17;
G+=b.G;
}
};
int main()
{
//freopen("in.txt","r",stdin);
string a,b;
cin>>a>>b;
node A(a);
node B(b);
A.add(B);
printf("%d.%d.%d\n",A.G,A.S,A.K);
system("pause");
return 0;
}
后方发现可以把 ‘.’输入到一个char型后,代码就一下子简单了。
#include<iostream>
using namespace std;
int main()
{
int G,G1,S,S1,K,K1;
char t;
cin>>G>>t>>S>>t>>K;
cin>>G1>>t>>S1>>t>>K1;
K += K1;
S += K/29;
K %= 29;
S += S1;
G += S/17;
S %= 17;
G += G1;
cout<<G<<"."<<S<<"."<<K<<endl;
return 0;
}