(python 3)1037 在霍格沃茨找零钱 (20分)

1037 在霍格沃茨找零钱 (20分)

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱。

输入格式:

输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是 [0, 10​7​​] 区间内的整数,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

 题不是很难,主要注意钱不够的时候要输出要加负号即可。

这个题有两种思路:

       一是可以一位一位的加减来算,这种方法适合有比较大的数字的情况。

       例如:https://blog.csdn.net/xutiantian1412/article/details/79360842

       二是可以将钱都转化为面值最小的纳特,这种方法的缺点是当加隆的数量过多的时候(加隆范围:[0, 10​^7​​] ),转换为纳特很可能超出整型的表示范围(带符号32位int类型整数为-2147483648~2147483647),不过既然没出错,则表示测试点中没有很大的数据,可以偷个懒(手动滑稽)。

 

python代码;

import re


#将钱全部转换为纳特
#Convert all the money into Knut
def To_Knut(a1,a2,a3):
    return a1*17*29+a2*29+a3


#将纳特转换为正常的形式
#Convert Knut into normal form
def To_normal_form(n):
    #钱不够,输出字符串也要加负号
    #Not enough money,the output string needs to add a minus sign
    if n<0:
        symbol='-'
        n=abs(n)
    else:
        symbol=''
    galleon=n//(17*29)
    sickle=(n-galleon*17*29)//29
    knut=n%29
    return symbol+'.'.join(list(map(str,[galleon,sickle,knut])))


a1,a2,a3,b1,b2,b3=map(int,re.split('[. ]',input()))


small_change=To_Knut(b1,b2,b3)-To_Knut(a1,a2,a3)


print(To_normal_form(small_change))

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Think@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值