teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2015/05/20 02:10

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -47,17 +47,19 @@
47
47
 
48
48
  一つ問題があります。
49
49
  total に 40の階乗がこのままだと入りません。
50
+ 40の階乗という数値はとても大きいのです。
50
51
  long や int ではオーバーフローを起こしてしまい正しく計算できません。
51
52
  この点については、学校の先生に問題の解釈があっているか聞いて下さい。
52
53
 
53
- おまけでループを一つにするこ
54
+ ただそれだあまりにもあれなので
54
- れが計算できるクラス`java.math.BigInteger`を使った場合の答えを書いておきますね。
55
+ 計算できるクラス`java.math.BigInteger`を使った場合の答えを書いておきますね。
55
56
 
56
57
  ```lang-Java
57
58
  import java.math.*;
58
59
 
59
60
  BigInteger total = BigInteger.valueOf(1);
60
61
 
62
+ // ループは一つにすることもできます。
61
63
  for (int number=1; number <=100; number++) {
62
64
  if (number <= 40) {
63
65
  // 40まではtotalに対してnumberを掛け算

2

問題に対する回答を追記

2015/05/20 02:10

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -42,28 +42,34 @@
42
42
  System.out.println(total);
43
43
  ```
44
44
 
45
+ ---
46
+ **おまけ**
47
+
45
48
  一つ問題があります。
46
49
  total に 40の階乗がこのままだと入りません。
47
50
  long や int ではオーバーフローを起こしてしまい正しく計算できません。
48
51
  この点については、学校の先生に問題の解釈があっているか聞いて下さい。
49
52
 
50
- ---
51
- **おまけ**
53
+ おまけで、ループを一つにすることと…
54
+ これが計算できるクラス`java.math.BigInteger`を使った場合の答えを書いておきますね。
52
55
 
53
- ループは3つではなく一つにすることもできます。
54
-
55
56
  ```lang-Java
56
- int total = 1;
57
+ import java.math.*;
57
58
 
59
+ BigInteger total = BigInteger.valueOf(1);
60
+
58
61
  for (int number=1; number <=100; number++) {
59
62
  if (number <= 40) {
60
63
  // 40まではtotalに対してnumberを掛け算
64
+ total = total.multiply(BigInteger.valueOf(number));
61
65
  }
62
66
  else if (number <= 50 {
63
67
  // 次の50までは(=41から50までは)totalに対してnumberを掛け算
68
+ total = total.subtract(BigInteger.valueOf(number));
64
69
  }
65
70
  else {
66
71
  // その他(=51以上)から最後まではtotalに対してnumberを足し算
72
+ total = total.add(BigInteger.valueOf(number));
67
73
  }
68
74
  }
69
75
 

1

問題を追記

2015/05/20 02:09

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -42,6 +42,11 @@
42
42
  System.out.println(total);
43
43
  ```
44
44
 
45
+ 一つ問題があります。
46
+ total に 40の階乗がこのままだと入りません。
47
+ long や int ではオーバーフローを起こしてしまい正しく計算できません。
48
+ この点については、学校の先生に問題の解釈があっているか聞いて下さい。
49
+
45
50
  ---
46
51
  **おまけ**
47
52