1037. 在霍格沃茨找零钱(20)
Posted 熊猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1037. 在霍格沃茨找零钱(20)相关的知识,希望对你有一定的参考价值。
1037. 在霍格沃茨找零钱(20) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱P和他实付的钱A,你的任务是写一个程序来计算他应该被找的零钱。 输入格式: 输入在1行中分别给出P和A,格式为“Galleon.Sickle.Knut”,其间用1个空格分隔。这里Galleon是[0, 107]区间内的整数,Sickle是[0, 17)区间内的整数,Knut是[0, 29)区间内的整数。 输出格式: 在一行中用与输入同样的格式输出哈利应该被找的零钱。如果他没带够钱,那么输出的应该是负数。 输入样例1: 10.16.27 14.1.28 输出样例1: 3.2.1 输入样例2: 14.1.28 10.16.27 输出样例2: -3.2.1
#include <iostream> #include <cstdio> using namespace std; struct DATA { long long g,s,k; void init(long long gg,long long ss,long long kk) { g=gg; s=ss; k=kk; } DATA operator - (DATA & b) { DATA tmp; //如果相等直接返回0 if((*this)==b) { tmp.init(0,0,0); return tmp; } //假设this > b else { long long sub1,sub2; long long sub; sub1=g*17*29+s*29+k; sub2=b.g*17*29+b.s*29+b.k; sub=sub1-sub2; tmp.init(sub/29/17,(sub/29)%17,sub%29); return tmp; } } bool operator > (const DATA & data) { if(data.g!=g) { return g>data.g; } else { if(s!=data.s) { return s>data.s; } else { if(k!=data.k) { return k>data.k; } else { return false; } } } } bool operator ==(const DATA & data) { return (this->g==data.g&&this->s==data.s&&this->k==data.k); } }; int main() { long long g[2],s[2],k[2]; scanf("%lld.%lld.%lld %lld.%lld.%lld",&g[0],&s[0],&k[0],&g[1],&s[1],&k[1]); DATA a,b; a.init(g[0],s[0],k[0]); b.init(g[1],s[1],k[1]); if(a==b) { printf("0.0.0\n"); } else if(a>b) { a=a-b; printf("-%lld.%lld.%lld\n",a.g,a.s,a.k); } else { b=b-a; printf("%lld.%lld.%lld\n",b.g,b.s,b.k); } return 0; }
以上是关于1037. 在霍格沃茨找零钱(20)的主要内容,如果未能解决你的问题,请参考以下文章