zoukankan      html  css  js  c++  java
  • [算法] 数字变换:举一反三之数字反转

    首先是一个非常简单的题目,如何将一个数字反过来,比如12345反转成54321;

    可以选择将数字转换成字符串然后进行首尾换位操作,但更经典的作法应该是依次从原数字尾部取数,加到结果的高位;

    深入思考一下,如何将数字按二进制表示进行反转呢,比如6变成3(110变成011)?如何以两位为单位进行反转呢,比如12345变成45231?

    事实上,经典的数字反转算法中可以抽出两个概念,一个是这个数字的进制,另一个是进行反转时要求以多少位为一个整体;

    抽出这些之后,整个算法不需要改变:

    # -*- coding: utf-8 -*-
    
    import sys
    
    # 以多少位为一个整体
    N = 1
    # 进制
    factor = 2
    # 计算变换过程中的进位量
    divisor = factor ** N
    
    # 读入原始数字
    num = int(sys.stdin.readline().strip())
    ret = 0
    raw = num
    
    # 消耗原数字
    while raw > 0:
        # 满足整个分块的部分
        if (raw >= divisor):
            ret = ret * divisor + raw % divisor
            raw = raw / divisor
        else:
            # 不满足整个分块,先取位数
            n = 0
            tmp = raw
            while tmp > 0:
                n += 1
                tmp /= factor
            # 按位数计算进位
            tmp_divisor = factor ** n
            ret = ret * tmp_divisor + raw
            raw -= raw
    
    print ret
    
  • 相关阅读:
    图片自适应居中
    常用正则记录
    继承
    HTML学习
    js原型与原型链理解
    mac 及mac下开发常用快捷键命令
    服务器返回的各种HTTP状态码介绍(转)
    webstorm使用笔记
    《Javascript Dom 高级程序设计》读书笔记
    ECMAScript6学习笔记
  • 原文地址:https://www.cnblogs.com/ZisZ/p/3334667.html
Copyright © 2011-2022 走看看