前提・実現したいこと
Pythonで10進数から2進数に変換するプログラムを書いており、python2では以下のプログラムでは実行できますが、python3では値がオーバーフローしてしまい、エラーが出てしまうので解決方法を教えていただきたいです。
入力の例
3 44 #10進数44の2進数表記をした時調べる桁数は3つ
2 #右から2桁め
4 #右から4桁め
6 #右から6桁め
44=101100なので出力としては
0
1
1
となる
発生している問題・エラーメッセージ
python3
13 44 22 34 46 5Traceback (most recent call last): 6 File "nisinsu.py", line 11, in <module> 7 buf = buf + (value % 2) * base 8OverflowError: int too large to convert to float
該当のソースコード
python2
1#coding:UTF-8 2input_line =raw_input() 3N,value=[int(x) for x in input_line.split()]#調べる桁の数N個,10進数の値value 4 5s = [input() for i in range(N)]#調べる桁の位置 2進数の一番右の桁を1桁目とする 6 7buf = 0 8base = 1 9 10while value > 0: 11 buf = buf + (value % 2) * base 12 value = value / 2 13 base = base * 10 14 #10進数から2進数に変換 15 16k=list(str(buf)) #2進数の値を一文字ずつリストに格納 17f = [int(j) for j in k] #int変換 18print(f) 19list_1=f.reverse() #配列を反転 20 21for i in range(0,N): 22 print(f[s[i]-1]) #2進数の桁の値を表示 23
該当のソースコード
python3
1input_line =input() 2N,value=[int(x) for x in input_line.split()]#調べる桁の数N個,10進数の値value 3 4s = [input() for i in range(N)]#調べる桁の位置 2進数の一番右の桁を1桁目とする 5 6buf = 0 7base = 1 8 9while value > 0: 10 buf = buf + (value % 2) * base 11 value = value / 2 12 base = base * 10 13 #10進数から2進数に変換 14 15k=list(str(buf)) #2進数の値を一文字ずつリストに格納 16f = [int(j) for j in k] #int変換 17print(f) 18list_1=f.reverse() #配列を反転 19 20for i in range(0,N): 21 print(f[s[i]-1]) #2進数の桁の値を表示
試したこと
Decimalを試しましたが使い方がいまいちよくわからず、オーバーフローしたままでした。
補足情報(FW/ツールのバージョンなど)
python 2.7.10
python 3.7.4
を使用しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/14 03:10