すみません、dodoxさんの翻訳内容であっています。訂正します。
現在、ユーザーからランダムな整数入りのリストを取って、そレを一旦2進数に変換し、新しい10進数へと変換する、プログラムを作っています。例えば[11, 24] という リストの箱で受け取った場合は最終的に
424896という10進数に変換されて、出力されます。
受け取ったリストは最初に[11, 24] から [1011, 11000]と変換されます。
そちら1つずつの整数要素を連続させます。例えば 1は11に0は00になります。上の例だとこうなります。
[1011, 11000] → [11001111, 1111000000]
それから、要素が区切られている部分に0を挿入して要素を増やします。0の挿入は連続の作業が終了した後に行います。今は、2つの要素だけで行っていますが、要素数が1つの場合は0は挿入しません、
また 要素数3つや4つの場合などはその要素の前ごとに挿入します。最後の要素の後には0は挿入しません。
例[1100] (要素が1つの場合)
[1011,0 ,11110000, 0 ,100111100] (要素が3つある時)
上の[11,24]だとこうなります、[11001111, 0 , 1111000000]。そしてそれらを結合すると、[1100111101111000000]となります。
それを10進数に変換すると、424896となります。
ですが、私の書いたコードですと、[11, 24]の10進数の出力が 51230208 となり、
本来の 424896 と出力されません。解決方法が見当たらず、質問させて頂きました。
すみませんが、よろしくお願いします。
php:filename.php
1def encode(numbers): 2 numbers= ''.join(bin(e)[2: ] for e in the_input)#受けとったリストの中身を2真数へ 3 combination= '' #0が結合した後の空のstr 4 index = 0 5 doubled_numbers = [] 6 for number in numbers: 7 double_number = '' 8 number_string_rep = str(number) #int to str 9 for letter in number_string_rep: 10 11 double_number = double_number + letter + letter #iterateしたletterを足して、2連続させる 12 doubled_numbers.append(double_number) #空のliistへappend 13 combination= "0".join(doubled_numbers) #0の結合。 14 return int(combination, 2) #0が結合された後の文字列を10進数へ変換 15input: [11, 24] 16out: 51230208 17#out should be 424896
回答3件
あなたの回答
tips
プレビュー