這個問題比較簡單,轉換成n進製,就是短除法,即除n取餘法,餘數逆序排列之後即為最終的結果,也就是最後得到的餘數,是最終結果的高位,最開始得到的餘數,是最終結果的低位。這樣用棧來做比較容易,當然用別的型別也可以,不過下標取值時麻煩點。
主要有二進位制,八進位制和十六進製制。需要注意的是,二進位制有0和1兩個數字,八進位制有0~7八個數字,十六進製制有0~f十六個數字。
首先用python實現棧。
def stack(object):
def __init__(self):
self.lt =
def push(self, item):
def pop(self):
self.lt.pop()
def isempty(self):
return self.lt ==
def peek(self):
if len(self.lt) == 0:
return ''
else:
return self.lt[-1]
def size(self):
return len(self.lt)
接著用棧來解題
def divideby2s(decnumber, base):
remstack = stack()
# 定義字串,用於可選數字
digits = '0123456789abcdef'
while decnumber > 0:
# 取餘併入棧
rem = decnumber % base
remstack.push(rem)
decnumber = decnumber // base
binstring = ''
# 根據餘數來選擇實際的具體進製數字
while not remstack.isempty():
binstring += digits[remstack.pop()]
return binstring
十進位制小數轉N進製(python)
題目描述 編寫程式實現將任意10進製正小數m轉換成n進製的正小數,小數點後保留10位小數。輸入輸入包含兩個數m,n,用空格隔開。輸入包含多組測試,當m,n都為0時輸入結束。limits 0.0000009輸出 輸出10進製正小數m的n進製小數。結果保留10位小數。樣例輸入樣例 1 0.795 3 0...
m進製轉十進位制
題目描述 description 將m進製數n轉化成乙個十進位制數 m 16 題目保證轉換後的十進位制數 100 輸入描述 input description 共一行n和m 輸出描述 output description 共乙個數 表示m進製的n化成十進位制的數 樣例輸入 sample input ...
十進位制數轉N進製c 實現
編寫乙個演算法,將乙個非負的十進位制整數 n轉換為另乙個基數為b的 b進製整數。include include using namespace std 所要的十進位制轉 b進製的函式 void shift int b,int before char b num b if b 10 定義好大於 10的...