鱼C论坛

 找回密码
 立即注册
查看: 2264|回复: 28

[已解决]Python:每日一题 319

[复制链接]
发表于 2020-1-30 14:49:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2020-1-30 14:51 编辑

今天的题目(依然很简单):


给定一个十进制数 n 和一个整数 k,将十进制数 n 转换成 k 进制数。

说明:如果有数位的值超过 9,则用小写字母表示(10 -> a,11 -> b,12 -> c,…)

示例 1:

输入:n = 5,k = 2
输出:"101"
示例 2:

输入:n = 30,k = 16
输出:"1e"


欢迎大家一起答题!
最佳答案
2020-1-30 15:21:37
本帖最后由 TJBEST 于 2020-1-30 15:46 编辑
  1. def fun319(n,k):
  2.     if n == 0:
  3.         return '0'
  4.     const_table = ['0','1','2','3','4','5','6','7','8','9',\
  5.     'a','b','c','d','e','f','g','h','i','j','k','l','m','n',\
  6.     'o','p','q','r','s','t','u','v','w','x','y','z']
  7.     res = ''
  8.     while n:
  9.         re = n % k
  10.         n = n // k
  11.         res += const_table[re]
  12.     return  res[::-1]
复制代码


我觉得常数查表 应该比利用函数生成这个表要快

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-30 15:07:10 | 显示全部楼层
前排,如果小写字母不够用 咋办? 比如 64进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 15:07:45 | 显示全部楼层
TJBEST 发表于 2020-1-30 15:07
前排,如果小写字母不够用 咋办? 比如 64进制


没有这种情况,保证小写字母够用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 15:21:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 TJBEST 于 2020-1-30 15:46 编辑
  1. def fun319(n,k):
  2.     if n == 0:
  3.         return '0'
  4.     const_table = ['0','1','2','3','4','5','6','7','8','9',\
  5.     'a','b','c','d','e','f','g','h','i','j','k','l','m','n',\
  6.     'o','p','q','r','s','t','u','v','w','x','y','z']
  7.     res = ''
  8.     while n:
  9.         re = n % k
  10.         n = n // k
  11.         res += const_table[re]
  12.     return  res[::-1]
复制代码


我觉得常数查表 应该比利用函数生成这个表要快

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
zltzlt + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-1-30 15:25:13 | 显示全部楼层
TJBEST 发表于 2020-1-30 15:21
我觉得常数查表 应该比利用函数生成这个表要快

解答错误

输入:n = 0,k = 16
输出:""
预期结果:"0"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 15:46:15 | 显示全部楼层
已修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 15:47:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 16:08:10 | 显示全部楼层
n = 11 k = 12
要回传b吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 16:09:04 | 显示全部楼层
Vmtayvj 发表于 2020-1-30 16:08
n = 11 k = 12
要回传b吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 16:34:27 | 显示全部楼层
  1. from itertools import chain
  2. def func319(n,k):
  3.     if n==0:
  4.         return "0"
  5.     ret=""
  6.     l=tuple(chr(i) for i in chain(range(48,58),range(97,123)))
  7.     negetive=False
  8.     if (n<0):
  9.         n=-n
  10.         negetive=True
  11.     while n>0:
  12.         ret+=l[n%k]
  13.         n//=k
  14.     if negetive:
  15.         ret+='-'
  16.     return ret[::-1]
复制代码

评分

参与人数 1荣誉 +9 鱼币 +9 收起 理由
zltzlt + 9 + 9

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 16:35:50 | 显示全部楼层

chain() 从哪来的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 16:36:53 | 显示全部楼层
zltzlt 发表于 2020-1-30 16:35
chain() 从哪来的?

加上了,itertools里的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 17:13:05 | 显示全部楼层
  1. def f319(n,k):
  2.     d=[str(e) if e<=9 else chr(e-10+ord('a'))for e in range(k)]
  3.     if not n:
  4.         return '0'
  5.     r='' if n>=0 else '-'
  6.     t=''
  7.     n=abs(n)
  8.     while n:
  9.         n,a=divmod(n,k)
  10.         t+=d[a]
  11.     return r+t[::-1]
复制代码

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
zltzlt + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 17:13:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 17:14:38 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 18:02:34 | 显示全部楼层
需要考虑n为负数吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 18:06:26 | 显示全部楼层
wanting-for 发表于 2020-1-30 18:02
需要考虑n为负数吗?

不需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 18:25:02 | 显示全部楼层
  1. def solve_319(n,k):
  2.     str1 = ''
  3.     if n == 0:
  4.         return 0
  5.     while n:
  6.         each = n%k
  7.         if each>9:
  8.             str1+=chr(97+each-10)
  9.         else:
  10.             str1+=str(each)
  11.         n = n//k
  12.     return str1[::-1]
  13. print(solve_319(5,2))
复制代码

评分

参与人数 1荣誉 +9 鱼币 +9 收起 理由
zltzlt + 9 + 9

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 18:26:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 21:50:39 | 显示全部楼层
本帖最后由 hrp 于 2020-1-30 21:55 编辑
  1. def func319(n, k):
  2.     m = [str(i) for i in range(10)] + [chr(i) for i in range(97, 123)]
  3.     if not n:
  4.         return '0'
  5.     res = ''
  6.     while n:
  7.         res += m[n % k]
  8.         n //= k
  9.     return res[::-1]
复制代码

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
zltzlt + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表