• Python 练习题之一回文数


    题目:求大于10的,10进制,8进制,2进制表示的回文数都一样的最小的整数。(题目来源程序员的算法趣题)

    回文数:将某个数字的每个位的数字反向排列形成的新数和原来的数一样的数,例如9,例如12355321等。

    直接出代码:

    import numpy as np
    import datetime
    
    def calintnum_10(num):
        allnum=[]   
        upvalue=num%10
        allnum.append(upvalue)
        num=int(num/10)
        while(num!=0):
            allnum.append(num%10)      
            num=int(num/10)        
        return allnum  
    def calintnum_8(num):
        allnum=[]   
        upvalue=(num)%8
        allnum.append(upvalue)
        num=eval(oct(int((num)/8)))
        while(num!=0):
            allnum.append((num)%8)      
            num=eval(oct(int((num)/8)))    
        return allnum    
    def calintnum_2(num):
        allnum=[]   
        upvalue=num%2
        allnum.append(upvalue)
        num=eval(oct(int((num)/2)))
        while(num!=0):
            allnum.append((num)%2)      
            num=eval(oct(int((num)/2)))    
        return allnum 
    def judgesuitnum(allnum_ori):    
        allnum_rev=allnum_ori.copy()
        allnum_rev.reverse()
        if(allnum_ori==allnum_rev):
            return True
        else:
            return False
     
        
        
    def judgesuitnum3(num):
        num_8=oct(num)
        num_2=bin(num)
        all_10=calintnum_10(num)
        all_8=calintnum_8(eval(num_8))
        all_2=calintnum_2(eval(num_2))   
        
        if(judgesuitnum(all_10) and judgesuitnum(all_8) and judgesuitnum(all_2)):
            return True
        else:
            return False
    start = datetime.datetime.now()    
    find=False  
    num=10          
    while(not find):
          find=judgesuitnum3(num)   
          if(find):
              break
          else:          
            num=num+1
          
    end=datetime.datetime.now()      
    spendtime=end-start
    print("find num is:%d"%num)         
    print("find Spend time:{}".format(spendtime))     
    
    
    def strcode(num,cut=True):
        numstr=str(num)
        if(cut):
            numstr=numstr[2:]
        numstr_inv=numstr[::-1] 
        return [numstr,numstr_inv]      
    
    def judgesuitnum3_2(num):
        num_10str=strcode(num,False)
        num_8=oct(num)
        num_8str=strcode(num_8)
        num_2=bin(num)
        num_2str=strcode(num_2)
        
        if(num_10str[0]==num_10str[1] and num_8str[0]==num_8str[1] and num_2str[0]==num_2str[1]):
            return True
        else:
            return False
    print("******************************************")      
    start = datetime.datetime.now()    
    find=False  
    num=10          
    while(not find):
          find=judgesuitnum3_2(num)   
          if(find):
              break
          else:          
            num=num+1
          
    end=datetime.datetime.now()      
    spendtime=end-start
    print("find num is:%d"%num)         
    print("find Spend time:{}".format(spendtime)) 
    View Code

    一共两个方法,写的low,新学的。结果如下:明显第二种方法快了好多。

     欢迎交流。

  • 相关阅读:
    Java 进制转换
    k-近邻算法实例
    Java JTS & 空间数据模型
    Java中 &&与&,||与|的区别
    http https 区别
    四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x
    OPC测试常用的OPCClient和OPCServer软件推荐
    关于TFS2010 远程无法创建团队项目的若干问题总结
    我对NHibernate的感受(4):令人欣喜的Interceptor机制
    我对NHibernate的感受(3):有些尴尬的集合支持
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15602618.html
Copyright © 2020-2023  润新知