回答編集履歴
7
コードのコメントの変更。
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
```Ruby
|
5
5
|
require 'bigdecimal'
|
6
6
|
|
7
|
-
# 1/nが
|
7
|
+
# 1/nが有限小数でないとき
|
8
8
|
def sum(n, i, j)
|
9
9
|
if n > 10
|
10
10
|
a, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
|
6
コードの修正をおこなう。
answer
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
```Ruby
|
5
5
|
require 'bigdecimal'
|
6
6
|
|
7
|
-
# n
|
7
|
+
# 1/nが循環小数なら以下でOK
|
8
8
|
def sum(n, i, j)
|
9
9
|
if n > 10
|
10
|
-
|
10
|
+
a, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
|
11
11
|
else
|
12
|
-
|
12
|
+
a, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
|
13
13
|
end
|
14
|
-
x, y, *z =
|
14
|
+
x, y, *z = a.split('')
|
15
15
|
z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
|
16
16
|
end
|
17
17
|
|
5
コードを短くしてみた。
answer
CHANGED
@@ -8,13 +8,11 @@
|
|
8
8
|
def sum(n, i, j)
|
9
9
|
if n > 10
|
10
10
|
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
|
11
|
-
x, y, *z = str.split('')
|
12
|
-
return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
|
13
11
|
else
|
14
12
|
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
|
15
|
-
x, y, *z = str.split('')
|
16
|
-
return z.map(&:to_i)[i - 1..j - 1].inject(:+)
|
17
13
|
end
|
14
|
+
x, y, *z = str.split('')
|
15
|
+
z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
|
18
16
|
end
|
19
17
|
|
20
18
|
p sum(7, 3, 8)
|
4
しょうもないミスをしていたので修正。
answer
CHANGED
@@ -9,11 +9,11 @@
|
|
9
9
|
if n > 10
|
10
10
|
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
|
11
11
|
x, y, *z = str.split('')
|
12
|
-
return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1
|
12
|
+
return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
|
13
13
|
else
|
14
14
|
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
|
15
15
|
x, y, *z = str.split('')
|
16
|
-
return z.map(&:to_i)[i - 1
|
16
|
+
return z.map(&:to_i)[i - 1..j - 1].inject(:+)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -21,5 +21,5 @@
|
|
21
21
|
p sum(97, 2, 96)
|
22
22
|
```
|
23
23
|
実行結果
|
24
|
-
|
24
|
+
27
|
25
25
|
432
|
3
n が 10 未満でもOK
answer
CHANGED
@@ -4,13 +4,22 @@
|
|
4
4
|
```Ruby
|
5
5
|
require 'bigdecimal'
|
6
6
|
|
7
|
+
# n = 2, 5, 10 以外なら以下でOK
|
7
|
-
def sum(n, i, j)
|
8
|
+
def sum(n, i, j)
|
9
|
+
if n > 10
|
8
|
-
|
10
|
+
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
|
9
|
-
|
11
|
+
x, y, *z = str.split('')
|
10
|
-
|
12
|
+
return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1, j - 1].inject(:+)
|
13
|
+
else
|
14
|
+
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
|
15
|
+
x, y, *z = str.split('')
|
16
|
+
return z.map(&:to_i)[i - 1, j - 1].inject(:+)
|
17
|
+
end
|
11
18
|
end
|
12
19
|
|
20
|
+
p sum(7, 3, 8)
|
13
21
|
p sum(97, 2, 96)
|
14
22
|
```
|
15
23
|
実行結果
|
24
|
+
29
|
16
25
|
432
|
2
コメントを追加した。
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
require 'bigdecimal'
|
6
6
|
|
7
7
|
def sum(n, i, j)
|
8
|
-
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-')
|
8
|
+
str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
|
9
9
|
x, y, *z = str.split('')
|
10
10
|
z.map(&:to_i).unshift(0 * remain.to_i)[i - 1, j - 1].inject(:+)
|
11
11
|
end
|
1
文を追加してみた。
answer
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
シンプルに解いてみた。
|
2
|
+
|
1
3
|
jの上限はメモリが許す限りです。
|
2
4
|
```Ruby
|
3
5
|
require 'bigdecimal'
|