回答編集履歴

1

多倍長計算のコードを追加

2021/01/28 14:00

投稿

kazuma-s
kazuma-s

スコア8222

test CHANGED
@@ -3,3 +3,69 @@
3
3
  先頭から16桁までが有効数字。
4
4
 
5
5
  後の桁は、2進の54ビット目以降が全部0 だとして10進数に変換したものです。
6
+
7
+
8
+
9
+ **追記**
10
+
11
+ 数値を int の配列で保持し、1つの要素に10進 4桁を入れる多倍長計算をしてみました。
12
+
13
+ ```C
14
+
15
+ #include <stdio.h>
16
+
17
+
18
+
19
+ #define N 6 // (4 * N)桁までの数値
20
+
21
+
22
+
23
+ void print(const int *a)
24
+
25
+ {
26
+
27
+ int i = N;
28
+
29
+ while (--i > 0 && a[i] == 0) ;
30
+
31
+ printf("%d", a[i]);
32
+
33
+ while (--i >= 0) printf("%04d", a[i]);
34
+
35
+ putchar('\n');
36
+
37
+ }
38
+
39
+
40
+
41
+ void power(int x, int y, int *a) // a = pow(x, y)
42
+
43
+ {
44
+
45
+ a[0] = 1;
46
+
47
+ for (int i = 1; i < N; i++) a[i] = 0;
48
+
49
+ for (int i = 0; i < y; i++)
50
+
51
+ for (int c = 0, j = 0; j < N; j++)
52
+
53
+ a[j] = a[j] * x + c, c = a[j] / 10000, a[j] %= 10000;
54
+
55
+ }
56
+
57
+
58
+
59
+ int main(void)
60
+
61
+ {
62
+
63
+ int a[N];
64
+
65
+ power(17, 17, a);
66
+
67
+ print(a);
68
+
69
+ }
70
+
71
+ ```