回答編集履歴

1

サンプルコードの追加

2016/04/21 05:41

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -1,3 +1,53 @@
1
1
  20の階乗は2432902008176640000ですが、「[C言語講座:色々なデータ型の最大値、最小値](http://www1.cts.ne.jp/~clab/hsample/IO/IO19.html)」によるとintもlongもこの大きさの値を保持できるようにはなっていません。
2
2
 
3
3
  べつの手段を考えたほうがよいと思います。
4
+
5
+
6
+
7
+ 追記:
8
+
9
+ あえてjavascriptで、こんな考え方もあるよ的なサンプルコードを
10
+
11
+ ```javascript
12
+
13
+ var factorial = function(f){
14
+
15
+ // 下16桁を8桁単位で保持して計算する例
16
+
17
+ var p0 = 1, p1 = 0, p2 = 0;
18
+
19
+ var digit = 100000000
20
+
21
+ for(var i = 2; i <= f; i++){
22
+
23
+ p0 *= i; p1 *= i; p2 *= i;
24
+
25
+ // 下8桁から中8桁に繰り上げ結果反映
26
+
27
+ p1 += (p0 - p0 % digit) / digit;
28
+
29
+ p0 %= digit;
30
+
31
+ // 中8桁から上桁に繰り上げ結果反映
32
+
33
+ p2 += (p1 - p1 % digit) / digit;
34
+
35
+ p1 %= digit;
36
+
37
+ }
38
+
39
+ var result = "" + (p2==0?"":p2) + (p1==0?"":p1) + p0;
40
+
41
+ console.log(result);
42
+
43
+ return result;
44
+
45
+ }
46
+
47
+ factorial(20);
48
+
49
+ // 出力結果:"2432902008176640000"
50
+
51
+
52
+
53
+ ```