回答編集履歴

1

追記

2020/05/23 14:06

投稿

退会済みユーザー
test CHANGED
@@ -13,3 +13,131 @@
13
13
  ・べき乗は単純な掛け算の繰り返しである(ループで処理できる)
14
14
 
15
15
  というように、細かい要素に分けてやれば可能ですよね。
16
+
17
+
18
+
19
+ ---
20
+
21
+ 参考例として。
22
+
23
+ ちなみに、C#で適当に書くとこんなんなります。(速度とか効率はとりあえず置いときます)
24
+
25
+ ```C#
26
+
27
+ int n = 79; //とりあえずnの最大を与える
28
+
29
+ int powX = 3;
30
+
31
+ int powY = 1;
32
+
33
+ BigInteger val = powX; //出力する数を格納する変数
34
+
35
+
36
+
37
+ while (true)
38
+
39
+ {
40
+
41
+ //次のBigIntegerの桁数を計算する
42
+
43
+ //Log10(valNext)+1=80(桁数80)に達した時点で、valに79桁の最大の数が格納されている
44
+
45
+ var valNext = BigInteger.Pow(powX, powY);
46
+
47
+ if (((int)BigInteger.Log10(valNext) + 1) > n)
48
+
49
+ {
50
+
51
+ break;
52
+
53
+ }
54
+
55
+ val = valNext;
56
+
57
+ powY++; //べき乗する値を加算
58
+
59
+ }
60
+
61
+
62
+
63
+ //コンソールに文字列を出力
64
+
65
+ Console.WriteLine(val.ToString());
66
+
67
+ ```
68
+
69
+ C#なんて判らん!となるでしょうが、これをC言語の機能に置き換えると、
70
+
71
+ 0. 大きい数を扱う構造体(BigIntegerを置き換える)
72
+
73
+ 0. 上記構造体をべき乗(乗算)する関数(BigInteger.Powを置き換える)
74
+
75
+ 0. 上記構造体の桁数を計算する関数(BigInteger.Log10+1を置き換える)
76
+
77
+ 0. 上記構造体を文字列に変換する関数(val.ToString()を置き換える)
78
+
79
+
80
+
81
+ を用意すると、同等の機能を実現できます。
82
+
83
+
84
+
85
+ ```C
86
+
87
+ typedef struct BigInt
88
+
89
+ {
90
+
91
+ int Values[20];
92
+
93
+ } BigInt;
94
+
95
+
96
+
97
+ int main()
98
+
99
+ {
100
+
101
+ char buf[100];
102
+
103
+ int n = 79;
104
+
105
+ int powX = 3;
106
+
107
+ int powY = 1;
108
+
109
+ BigInt val = { powX };
110
+
111
+
112
+
113
+ while (true)
114
+
115
+ {
116
+
117
+ BigInt valNext = BigPow(powX, powY);
118
+
119
+ if (BigIntLength(valNext) > n)
120
+
121
+ {
122
+
123
+ break;
124
+
125
+ }
126
+
127
+ val = valNext;
128
+
129
+ powY++;
130
+
131
+ }
132
+
133
+
134
+
135
+ BigIntToString(buf, val);
136
+
137
+ printf("%s\r\n", buf);
138
+
139
+ return 0;
140
+
141
+ }
142
+
143
+ ```