zoukankan      html  css  js  c++  java
  • CD key 生成

    题目描述如下:

      某欧软件需要实现简易的CD-KEY算法,输入3个正整数,以空格隔开,根据者3个正整数生成的cd-key字符串。输出格式:xxxx-xxxx-xxxx-xxyy。

      包含16个字符,以短划线隔开,其中,cd-key的最后两位yy是用于cd-key的自校验,确保cd-key本身是合法的。

      cd-key使用的字符表:23456789ABCDEFGHJKLMNPQRSTUVWXYZ(共32个,由于1和I,0和O难以辨识,被剔除)

      实现原理如下:

        (1),输入3个32bit正整数,按顺序取每个正整数取低16bit,假设a,b,c,将abc串联在一起组成48bit的唤醒,然后从低到高,每次取5个bit,

          用其取值作为下标,从32字符表中查出对应的字符,循环输出14个字符(提示:第一个输出的字符应该是c的低5bit)。

        (2),上面输出的14个字符即cd-key的从做至右的前14个字符的ascll求和,从低到高,每5bit为下标,查表生成两个字符,作为第15,16,个cd-key

          的字符即为yy

    时间限制:无

    内存限制:无

    输入:  输入3个正整数,以空格隔开

    样例输入:1 1 1

    样例输出:3224-2262-2A22-J2CR

    答案

      python:

        

    num=raw_input()
    char_table="23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
    str_14=''
    str_15=''
    str_16=''
    result=''
    num2 = 0
    bin_num1 = str(bin(int(num[0]))).replace('0b','')
    bin_num2 = str(bin(int(num[2]))).replace('0b','')
    bin_num3 = str(bin(int(num[4]))).replace('0b','')
    bin_48 = bin_num1.zfill(16) + bin_num2.zfill(16) + bin_num3.zfill(16)
    for i in range(14):
        str_14=str_14+char_table[int(bin_48[-5:],base=2)]
        bin_48 = bin_48[-5:]+bin_48[:-5]
    for i in range(14):
        num2 = ord(str_14[i]) +num2
    tmp_str_2=str(bin(int(num2))).replace('0b','').zfill(32)[-10:]
    str_15=char_table[int(tmp_str_2[-5:],base=2)]
    str_16=char_table[int(tmp_str_2[:-5],base=2)]
    result_tmp=str_14+str_15+str_16
    for i in range (16):
        if i % 4 == 0 and i!=0:
            result=result+'-'+result_tmp[i]
        else :
            result = result+result_tmp[i]
    print result
  • 相关阅读:
    spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
    在zepplin 使用spark sql 查询mongodb的数据
    Unable to query from Mongodb from Zeppelin using spark
    spark 与zepplin 版本兼容
    kafka 新旧消费者的区别
    kafka 新生产者发送消息流程
    spark ui acl 不生效的问题分析
    python中if __name__ == '__main__': 的解析
    深入C++的new
    NSSplitView
  • 原文地址:https://www.cnblogs.com/codeblock/p/5957061.html
Copyright © 2011-2022 走看看