1. 程式人生 > >Python學習:將N進位制數轉換為M進位制數

Python學習:將N進位制數轉換為M進位制數

題目描述

程式設計實現將一個N進位制數轉換成M進位制數。

問題分析

將N進位制數轉換為M進位制數的一個直接的方法就是將N進位制數首先轉換為十進位制數,再從十進位制數往M進位制轉換。這樣相當於把十進位制當做一箇中間狀態來實現N進位制到M進位制的轉換,很大程度上簡化了問題。

程式碼實現

方法一:可實現任意進位制轉換

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Name: demo27.py
# Author: zhuzhuzhu   time:2018/5/29
# Connect: [email protected]
# Desc : 將N進位制數轉換為M進位制數 # Version:python3 def conversion_num(num, src, dest): rtn = '' # 1、校驗源(N進位制)和目標(M進位制)是否相同 if src == dest: rtn = num # 2、轉成10進位制# if src != 10: num_str = str(num) # 將列表翻轉 num_str = num_str[::-1] exe_num = 0 dec_num = 0
# 從最後一位數開始 for num_char in num_str: # 十六進位制處理 if num_char == 'A': num_char = '10' elif num_char == 'B': num_char = '11' elif num_char == 'C': num_char = '12' elif num_char == 'D'
: num_char = '13' elif num_char == 'E': num_char = '14' elif num_char == 'F': num_char = '15' num_int = int(num_char) if exe_num == 0: dec_num += num_int else: dec_num += src ** exe_num * num_int exe_num += 1 # 得到給定數字的十進位制形式 num = dec_num # 3、轉成目標進位制 # 判斷目標進位制是否為十進位制 if dest == 10: rtn = num else: num = int(num) while True: divisor = num // dest remainder = num % dest # 十六進位制處理 if remainder == 10: remainder = 'A' elif remainder == 11: remainder = 'B' elif remainder == 12: remainder = 'C' elif remainder == 13: remainder = 'D' elif remainder == 14: remainder = 'E' elif remainder == 15: remainder = 'F' rtn = str(remainder) + rtn if divisor <= 0: break else: num = divisor # 4、處理空的字串 if rtn == '': rtn = '0' return rtn new_num = conversion_num('011', 2, 10) print(new_num)

方法二:利用python內建函式(僅適用於目標進製為二進位制,八進位制,十六進位制的情況)

def conversion_num(num, src, dest):
    rtn = ''
    # 1、校驗源和目標是否相同
    if src == dest:
        rtn = num
    # 2、轉成10進位制
    if src != 10:
        dec_num = 0
        if src == 2:
            dec_num = int(num, 2)
        elif src == 8:
            dec_num = int(num, 8)
        elif src == 16:
            dec_num = int(num, 16)
        num = dec_num
    # 3、轉成目標進位制
    if dest == 10:
        rtn = num
    else:
        if dest == 2:
            rtn = bin(num)
        elif dest == 8:
            rtn = oct(num)
        elif dest == 16:
            rtn = hex(num)
    # 4、處理空的字串
    if rtn == '':
        rtn = '0'
    return rtn


new_num = conversion_num('111111', 2, 16)
print(new_num)

說明

相關推薦

Python學習N轉換M

題目描述 程式設計實現將一個N進位制數轉換成M進位制數。 問題分析 將N進位制數轉換為M進位制數的一個直接的方法就是將N進位制數首先轉換為十進位制數,再從十進位制數往M進位制轉換

Ex 2_25 n整數轉換形式..._第四次作業

運行時 es2017 整數 cnblogs 二進制 .cn http bsp alt (a) 當n=1時,(10)d=(1010)b 當n=2時,(100)d=(10)d x (10)d=(1010)b x (1010)b 當n=4時,(

c語言十進位制轉換16的函式

有3種方式實現,其中兩種是使用系統函式,另一種是直接自己編寫。 使用系統函式實現要加入#include <stdlib.h>,自己編寫則不需要這個標頭檔案。 下面的程式碼就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以。可自己選擇需要的實現

一個十進位制資料轉換M

題目描述 【問題描述】 用遞迴演算法將一個十進位制數X轉換成任意進位制數M(M<=16)。 其中X最大為7位整數 【輸入樣例】 31 16 {將十進位制31轉化為十六進位制數} 【輸出樣例

用棧實現十進位制轉換任意(2,8,16...).

解題思路:假如N為輸入的數,n為要轉換為的進位制,若要將十進位制231轉換為8進位制數,過程如下; N                        N/n                      N%n 231                   28         

Java如何十六轉換的程序

swift int i++ 進制數 pub 原理 lin uppercase enter package com.swift; import java.util.Scanner; public class Hex2Decimal { public stati

超長的十六轉換

之前在oj上做過,今天做藍橋杯基礎練習又遇到了這題 but沒有一遍AC 基礎練習 十六進位制轉八進位制 時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述   給定n個十六進位制正整數,輸出它們對應的八進位制數。 輸入格式   輸入的第一行為一個正整數

mysql16資料轉換10資料

需求:表中的資料的16進位制儲存在資料庫中,先需要將資料按照10進位制進行輸出解決方法:使用mysql自帶的conv函式進行資料轉換語法如下:conv(N,from base ,to base)例項1:SELECT conv( '0a', 16, 10 )例項2:set @n = "0926F281";sel

162補碼轉換10

// // main.c //  16位2進位制補碼轉換為10進位制 // // Created by LongMa on 15/8/7. //  Copyright (c) 2015年 itcast. All rights reserved. /*  1.十進位制值 == 各位權之和; 權(用陣列儲存)

python urlparse庫application/x-www-form-urlencoded轉換字典

data of type application/x-www-form-urlencoded轉換為字典形式 python官網有解釋:https://docs.python.org/2/library/urlparse.html urlparse.parse_qs(qs[

PythonUnicode16編碼轉換漢字方式和注意點

第一種: eval1 = eval("u" + "\'" + text + "\'") 第二種 b = bytes("abc", 'utf8') print(b.decode('utf8')) 第三種 和第一種一樣 a = '\u5386\u9633\u9547' 爬蟲得

組合語言學習之路(7)------------輸入10轉換2,存放在ax中,再轉換ASCII碼並輸出

data segment        inf1 db "please input a number(1-361):$"        ibuf db 7,0,6 dup(0)        obuf db 6 dup(0)        data ends        c

Python學習

eva hide con span money 技術分享 from 內部 size 本節要點:命名空間及作用域,函數嵌套,函數名本質,閉包 命名空間:   命名空間的本質:存放名字與值的綁定關系。 三種命名空間:   全局命名空間   局部命名空間   內置命名空間 三種命

bx中的二進位制轉換十六輸出

binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7h printit: mov dl,al mov ah

如何10資料儲存2資料(IMG2LCD的使用,pic2bin)

背景    fpga處理大資料時從txt讀取資料形式為2進位制或者16進位制,&readmemb/&readmemh,所以需要將資料轉換為二進位制或十六進位制存在txt中。 針對影象而言可以參考exe>IMG2LCD 下

c語言的n轉換10

#include<string.h> int main() {long t1; int i,n,t,t3; char a[100]; printf("please input anumber string:\n"); gets(a); strupr(a); t3=

一個十六字串轉換十進位制數值的問題

在程式中,我們有時需要將一個十六進位制字串轉換為十進位制數字。比如: char *ptr="0x11"; int n=0; //我們想讓n等於0x11,即17 通常我們在C中,想將一個字串轉換為一整形

藍橋杯之N轉換R

#include <iostream> #include <cstdio> #include<algorithm> using namespace std; char a[105]; int main() { int N,R,ans; cin>>N

如何double型數值轉換16的形式

昨天程式設計序遇到一個隨機生成的uid,怎麼都不知道怎麼生成的,最後用了HttpAnalyzerstdv7查了一下,原來是在js中生成的,為了模擬js,筆者將其內部函式看了一下,發現有程式碼中有一double型變數,將其轉換成為了16進位制,當時那個糾結啊,浪費了那麼多時間

utf-8格式的漢字轉換成16

//字串轉換成16進位制 function str2hex($str){ $hex = ''; for($i=0,$length=mb_strlen($str); $i<$length; $i++){ $hex .= dechex(or