質問編集履歴
1
非常にわかりにくくて申しわけありませんでした。問題文を訂正したので、そちらの方を宜しくお願いします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,20 +1,48 @@
|
|
1
|
-
|
1
|
+
すみません、dodoxさんの翻訳内容であっています。訂正します。
|
2
2
|
|
3
|
-
|
3
|
+
現在、ユーザーからランダムな整数入りのリストを取って、そレを一旦2進数に変換し、新しい10進数へと変換する、プログラムを作っています。例えば[11, 24] という リストの箱で受け取った場合は最終的に
|
4
4
|
|
5
|
-
|
5
|
+
424896という10進数に変換されて、出力されます。
|
6
6
|
|
7
|
-
|
7
|
+
受け取ったリストは最初に[11, 24] から [1011, 11000]と変換されます。
|
8
8
|
|
9
|
+
|
10
|
+
|
11
|
+
そちら1つずつの整数要素を連続させます。例えば 1は11に0は00になります。上の例だとこうなります。
|
12
|
+
|
13
|
+
[1011, 11000] → [11001111, 1111000000]
|
14
|
+
|
15
|
+
それから、要素が区切られている部分に0を挿入して要素を増やします。0の挿入は連続の作業が終了した後に行います。今は、2つの要素だけで行っていますが、要素数が1つの場合は0は挿入しません、
|
16
|
+
|
17
|
+
また 要素数3つや4つの場合などはその要素の前ごとに挿入します。最後の要素の後には0は挿入しません。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
例[1100] (要素が1つの場合)
|
22
|
+
|
23
|
+
[1011,0 ,11110000, 0 ,100111100] (要素が3つある時)
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
上の[11,24]だとこうなります、[11001111, 0 , 1111000000]。そしてそれらを結合すると、[1100111101111000000]となります。
|
28
|
+
|
29
|
+
それを10進数に変換すると、424896となります。
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
ですが、私の書いたコードですと、[11, 24]の10進数の出力が 51230208 となり、
|
34
|
+
|
9
|
-
|
35
|
+
本来の 424896 と出力されません。解決方法が見当たらず、質問させて頂きました。
|
36
|
+
|
37
|
+
すみませんが、よろしくお願いします。
|
10
38
|
|
11
39
|
```php:filename.php
|
12
40
|
|
13
41
|
def encode(numbers):
|
14
42
|
|
15
|
-
numbers= ''.join(bin(e)[2: ] for e in the_input)
|
43
|
+
numbers= ''.join(bin(e)[2: ] for e in the_input)#受けとったリストの中身を2真数へ
|
16
44
|
|
17
|
-
combination= ''
|
45
|
+
combination= '' #0が結合した後の空のstr
|
18
46
|
|
19
47
|
index = 0
|
20
48
|
|
@@ -24,19 +52,19 @@
|
|
24
52
|
|
25
53
|
double_number = ''
|
26
54
|
|
27
|
-
number_string_rep = str(number)
|
55
|
+
number_string_rep = str(number) #int to str
|
28
56
|
|
29
57
|
for letter in number_string_rep:
|
30
58
|
|
31
59
|
|
32
60
|
|
33
|
-
double_number = double_number + letter + letter
|
61
|
+
double_number = double_number + letter + letter #iterateしたletterを足して、2連続させる
|
34
62
|
|
35
|
-
doubled_numbers.append(double_number)
|
63
|
+
doubled_numbers.append(double_number) #空のliistへappend
|
36
64
|
|
37
|
-
combination= "0".join(doubled_numbers)
|
65
|
+
combination= "0".join(doubled_numbers) #0の結合。
|
38
66
|
|
39
|
-
return int(combination, 2)
|
67
|
+
return int(combination, 2) #0が結合された後の文字列を10進数へ変換
|
40
68
|
|
41
69
|
input: [11, 24]
|
42
70
|
|
@@ -45,15 +73,3 @@
|
|
45
73
|
#out should be 424896
|
46
74
|
|
47
75
|
```
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
、¥
|