n! 进制
Time limit per test: 1.0 seconds
Memory limit: 256 megabytes
n!
进制是指从数的最低位开始,第
i
位的权值是
(i+1)!
,第
i
位取值范围为
0
~
i+1
,
i
从
0
开始。
例如:
n!
进制的
21
对应10进制的
5
, 计算方法为:
2×2!+1×1!=5
。
n!
进制的
120
对应10进制的
10
,
1×3!+2×2!+0×1!=10
。
给你一个10进制数,求其
n!
进制的值。
Input
第 1 行为一个整数
T
(1≤T≤10)
,表示问题数。
接下来
T
行,每行一个10进制的整数
n
,
0≤n≤3628799
(10!−1)
。
Output
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出十进制数的对应的
n!
进制数的值。
Examples
Input
5
0
1
10
100
3628799
Output
case #0:
0
case #1:
1
case #2:
120
case #3:
4020
case #4:
987654321
Note
n!
表示
n
的阶乘。
Source
2017 编程实训第二次机考
python3代码实现:
import math
import itertools
def main():
n,c=get_data()
num=[]
for i in range(n):
num.append(cal(c[i]))
for k in range(n):
print('case '+'#'+str(k)+':')
print(num[k])
#获取数据
def get_data():
n= eval(input())
c=[]
for i in range(n):
str_in = input()
b = [int(n) for n in str_in.split()]
c.extend(b)
return n,c
#将十进制转化成N!进制
def cal(c):
b=list(str(c))#为了方便该数的长度
n=len(b)
a=int(c)
e=[]
for i in range(n+5)[::-1]:
f =int(a / math.factorial(i + 1))#将数除以(i+1)的阶乘以得到转化后对应的第i位数值
e.append(str(f))
a=int(a%math.factorial(i + 1))
s = int("".join(itertools.chain(*e)))#将列表中所有字符合并成一个字符串并把其转化成int型
return s
main()