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, 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.27Sample Output:
14.1.28
当相加为零时要处理。简单的另一种方法见
http://blog.youkuaiyun.com/cstopcoder/article/details/21556803
评测结果
时间 | 结果 | 得分 | 题目 | 语言 | 用时(ms) | 内存(kB) | 用户 |
---|---|---|---|---|---|---|---|
7月17日 20:05 | 答案正确 | 20 | 1058 | C++ (g++ 4.7.2) | 1 | 308 | datrilla |
测试点
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 1 | 180 | 10/10 |
1 | 答案正确 | 1 | 308 | 2/2 |
2 | 答案正确 | 1 | 308 | 2/2 |
3 | 答案正确 | 1 | 308 | 2/2 |
4 | 答案正确 | 1 | 256 | 2/2 |
5 | 答案正确 | 1 | 180 | 2/2 |
#include<iostream> #include<string> using namespace std; long int Getnum(string s1,long int *l) { long int temp=0,e=1; while((*l)>=0&&s1[*l]!='.') { temp=temp+(s1[*l]-'0')*e; e*=10; (*l)--; } (*l)--; return temp; } string Getstr(long int nn) { string ss; char cc; if(nn!=0) { while(nn>0) { cc=nn%10+'0'; ss=cc+ss; nn=nn/10; } } else { cc='0'; ss=cc; } return ss; } int main() { string A,B,sa; long int len1,len2,temp,c; cin>>A>>B; len1=A.length()-1; len2=B.length()-1; c=0; temp=Getnum(A,&len1)+Getnum(B,&len2); c=temp/29; temp%=29; sa="."+Getstr(temp); temp=c+Getnum(A,&len1)+Getnum(B,&len2); c=temp/17; temp%=17; sa="."+Getstr(temp)+sa; temp=c+Getnum(A,&len1)+Getnum(B,&len2); sa=Getstr(temp)+sa; cout<<sa<<endl; return 0; }