背景
这里的大多数人应该熟悉几种基本系统:十进制,二进制,十六进制,八进制。例如,在十六进制系统中,数字12345 16将代表
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
请注意,我们通常不希望基数(此处为16
)从数字更改为数字。
这些常用的位置系统的一般化使您可以为每个数字使用不同的数字基础。例如,如果我们在十进制和二进制系统之间切换(从最低有效数字的底数为10开始),则数字190315 [2,10]表示
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
我们将此基准表示为[2,10]
。最右边的基数对应于最低有效数字。然后,当您浏览数字(左边)时,您要经过底数(左),如果位数比基数多,则四处循环。
有关更多阅读,请参阅Wikipedia。
挑战
编写一个程序或函数,给定一个D
由输入基数I
和输出基数组成的数字列表O
,将所表示的整数D
从base 转换I
为base O
。您可以通过STDIN,ARGV或函数参数获取输入,然后返回结果或将其打印到STDOUT。
您可以假设:
- 在数字
I
和O
都大于1
。 - 在
I
与O
非空。 - 输入数字在给定的基数中有效(即,没有比其基数大的数字)。
D
可以为空(表示0
)或可以有前导零。您的输出不应包含前导零。特别是,表示结果的结果0
应作为空列表返回。
您不得使用任何内置或第三方基本转换功能。
这是代码高尔夫球,最短的答案(以字节为单位)获胜。
例子
D I O Result
[1,0,0] [10] [2] [1,1,0,0,1,0,0]
[1,0,0] [2] [10] [4]
[1,9,0,3,1,5] [2,10] [10] [7,6,7,5]
[1,9,0,3,1,5] [2,10] [4,3,2] [2,0,1,1,0,1,3,0,1]
[52,0,0,0,0] [100,7,24,60,60] [10] [3,1,4,4,9,6,0,0]
[0,2,10] [2,4,8,16] [42] [1,0]
[] [123,456] [13] []
[0,0] [123,456] [13] []
[]
如果输入是,我想生成[0]