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
    
  • 相关阅读:
    集成学习
    集成学习
    集成学习
    集成学习-Majority Voting
    pandas 之 groupby 聚合函数
    LDA-作为线性判别 降维 推导
    LDA-作为线性判别 分类器 推导
    ML-逻辑回归推导
    第一册:lesson eighty one.
    第一册:lesson seventy nine.
  • 原文地址:https://www.cnblogs.com/ZisZ/p/3334667.html
Copyright © 2011-2022 走看看