题目
题目描述
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)).
输入描述:
Each input file contains one test case which occupies a line with A and B in the standard form, separated by one space.
输出描述:
For each test case you should output the sum of A and B in one line, with the same format as the input.
理解
以“Galleon.Sickle.Knut”的形式做加法,其中Knut是29进制,Sickle是17进制。
思路
因为‘.’字符在cin输入时会默认为小数点,例如
int a;
cin>>a; //输入12.3
cout<<a; //结果a=12;
因此只能用getchar()单个字符输入,利用ch-'0’的方式将它转化为int类型,再换算进制。当然也可以将getchar()得到的char型字符直接加到string型字符串的末尾,然后将这个字符串通过num=stoi(str);转换为整数。
代码
#include<iostream>
using namespace std;
// Galleon.Sickle(17).Knut(29)
int main()
{
int *a=new int[6]; //前三位为数字A,后三位为数字B
int i=0; //i是循环量
for(int i=0; i<6; i++)
{
a[i]=0; //初始化必不可少!
}
for(int i=0; i<6; i++)
{
char tmp=getchar(); //tmp获取下一位字符
int temp=0; //temp将tmp获取的字符转为数字,加到相应位置
while(tmp!='.'&&tmp!=' '&&tmp!='\n')
{
temp=tmp-'0';
a[i]*=10;
a[i]+=temp;
tmp=getchar();
}
}
int *result=new int[3];
for(int i=0; i<3; i++)
{
result[i]=a[i]+a[i+3];
}
if(result[2]>=29)
{
result[2]-=29;
result[1]+=1;
}
if(result[1]>=17)
{
result[1]-=17;
result[0]+=1;
}
cout<<result[0]<<"."<<result[1]<<"."<<result[2];
return 0;
}