十进制转 n! 进制(python实现)

来源:互联网 发布:网络推广策划公司 编辑:程序博客网 时间:2024/05/20 17:58

n! 进制

Time limit per test: 1.0 seconds

Memory limit: 256 megabytes

n! 进制是指从数的最低位开始,第 i 位的权值是 (i+1)!,第i 位取值范围为 0~i+1i0 开始。

例如:
n! 进制的 21 对应10进制的 5, 计算方法为:2×2!+1×1!=5
n! 进制的 120 对应10进制的 101×3!+2×2!+0×1!=10

给你一个10进制数,求其 n! 进制的值。

Input

第 1 行为一个整数 T(1T10),表示问题数。

接下来 T 行,每行一个10进制的整数 n0n3628799(10!1)

Output

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出十进制数的对应的 n! 进制数的值。

Examples

Input
501101003628799
Output
case #0:0case #1:1case #2:120case #3:4020case #4:987654321

Note

n! 表示 n 的阶乘。

Source

2017 编程实训第二次机考 


python3代码实现:
import mathimport itertoolsdef 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 smain()


原创粉丝点击