问题描述
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱。
输入格式
输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是 [0,
1
0
7
10^7
107] 区间内的整数,Sickle 是 [0, 17) 区间内的整数,Knut 是 [0, 29) 区间内的整数。
输出格式
在一行中用与输入同样的格式输出哈利应该被找的零钱。如果他没带够钱,那么输出的应该是负数。
样例输入
10.16.27 14.1.28
样例输出
3.2.1
样例输入
14.1.28 10.16.27
样例输出
-3.2.1
C++代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int ps,pk,as,ak;
long long int pg,ag;
scanf("%lld.%d.%d %lld.%d.%d",&pg,&ps,&pk,&ag,&as,&ak);
int k,s;
long long int g;
if((ag<pg)||(ag==pg&&as<ps)||(ag==pg&&as==ps&&ak<pk)){
k=(29+pk-ak)%29;
if(pk-ak<0)
s=(17+ps-as-1)%17;
else
s=(17+ps-as)%17;
if(ps-as<0||(ps-as==0&&pk-ak<0))
g=pg-ag-1;
else
g=pg-ag;
printf("-%lld.%d.%d",g,s,k);
}
else{
k=(29+ak-pk)%29;
if(ak-pk<0)
s=(17+as-ps-1)%17;
else
s=(17+as-ps)%17;
if(as-ps<0||(as-ps==0&&ak-pk<0))
g=ag-pg-1;
else
g=ag-pg;
printf("%lld.%d.%d",g,s,k);
}
return 0;
}