Python “最短”挑战(12.13)

Python “最短”挑战(12.13)

写在前面

本挑战旨在训练对Python简洁性的理解程度,请你在编程的过程中尽量使得代码行数更短(是行数而不是字数)。最好在代码后面附一份正常的写法,防止日后想用此题却因为那糟糕的可读性而浪费时间。另外,本人仅仅是一个初学Python的大一新生,如果给出的代码有错误或有误导他人的地方,欢迎大佬指出,一定改正。
注意 本挑战仅限娱乐,请在作业和考试中不要一味地为了短而降低代码的可读性。
12.24更 最近有点厌倦这种刻意缩短代码长度的挑战了,先暂时变成每日一题吧。

Description

如果一个数满足以下性质,则称这个数是好的:

1.是四位数;
(这里的几位数和难度有关,请尽量保证你的代码具有普适性,不要写仅仅针对这一条题目的代码,下同)

2.在16进制、10进制、12进制下的各位之和相等。

比如,2991的各位之和为2+9+9+1=21,它的12进制为1893,各位之和也为21,但是它的16进制BAF的各位之和为11+10+15=36,所以2991不是好的。

请你编程找到所有的好数。

Input

没有输入。

Output

所有的好数,一行一个。

参考代码

#from math import log
#def fsum(n,f):return sum(n//f**i%f for i in range(4//log(f,10)))
def fsum(n,f,a=0):return fsum(n//f,f,a+n%f) if n else a
for x in [i for i in range(10**(4-1),10**4) if fsum(i,16)==fsum(i,12)==fsum(i,10)]:print(x)
'''
def fsum(n,f):
    ans=0
    while n!=0:
        ans+=n%f
        n//=f
    return ans
for i in range(1000,10000):
    if fsum(i,16)==fsum(i,12)==fsum(i,10):
        print(i)
'''
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值