10進法を2進法へ
decimal_number = input('10進数を入力してください ')
d = int(decimal_number)
ans = ''
while d:
r = d % 2
"""
新しく求めたビット r をstr型に変換し、
記録していたビット列 ans の左に結合する。
"""
ans = str(r) + ans
d = d // 2
print(f'{decimal_number}(10)={ans}(2)')
2進法を10進法へ
bit_string = input('2進数を入力してください ')
"""
例えば
abcd(2)
= a×2^3 + b×2^2 + c×2 + d
= (a×2^2 + b×2 + c)×2 + d
= {(a×2 + b)×2 + c}×2 + d
= [{(0×2 + a)×2 + b}×2 + c]×2 + d
となるから、最後の行の内側の括弧からループで計算する。
"""
ans = 0
for bit in bit_string:
ans = ans * 2 + int(bit)
print(f'{bit_string}(2)={ans}(10)')
n進法をm進法へ
def main():
print('n進数のaを10進数とm進数に変換します。')
print('ただし, n, mは2以上10以下または16です。')
print('n a m を半角で, スペースで区切って入力してください。')
n, a, m = input().split()
ans_10 = n2d(n, a)
ans_m = d2n(ans_10, m)
print(f'{a}({n}) = {ans_10}(10) = {ans_m}({m})')
HEXA = '0123456789abcdef'
H_DIC = {HEXA[i]:i for i in range(16)}
def d2n(decimal_number, n):
d, n = int(decimal_number), int(n)
if (2 <= n <= 10) or n == 16:
ans = ''
while d:
r = d % n
ans = HEXA[r] + ans
d = d // n
return ans
else:
return False
def n2d(n, n_decimal_number):
n, n_decimal_number = int(n), str(n_decimal_number)
if (2 <= n <= 10) or n == 16:
ans = 0
for figure in n_decimal_number:
ans = ans * n + H_DIC[figure]
return ans
else:
return False
def n2m(n, n_decimal_number, m):
tmp_10 = n2d(n, n_decimal_number)
ans = d2n(tmp_10, m)
return ans
if __name__ == '__main__':
main()