回答編集履歴
1
多倍長計算のコードを追加
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
|
+
```
|