質問編集履歴
3
ミス
test
CHANGED
File without changes
|
test
CHANGED
@@ -108,8 +108,6 @@
|
|
108
108
|
|
109
109
|
}
|
110
110
|
|
111
|
-
cout << " " << num1_digit << " ";
|
112
|
-
|
113
111
|
}
|
114
112
|
|
115
113
|
|
2
記述ミス
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,13 +8,13 @@
|
|
8
8
|
|
9
9
|
91の段階で結果がおかしくなります。
|
10
10
|
|
11
|
+
→検算したところ、9を掛けた時点でおかしくなるようです。
|
12
|
+
|
11
13
|
|
12
14
|
|
13
15
|
###該当のソースコード
|
14
16
|
|
15
|
-
```C++
|
16
|
-
|
17
|
-
#include <iostream>
|
17
|
+
```C++#include <iostream>
|
18
18
|
|
19
19
|
#include <iomanip>
|
20
20
|
|
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
#define DIGIT_BUF 1
|
27
|
+
#define DIGIT_BUF 1000
|
28
28
|
|
29
29
|
|
30
30
|
|
@@ -50,47 +50,11 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
void ArrayMul(int* num1, int* num2, int* num)
|
54
|
-
|
55
|
-
{
|
56
|
-
|
57
|
-
for (int i = 0; i < DIGIT_BUF; i++) {
|
58
|
-
|
59
|
-
num[i] = 0;
|
60
|
-
|
61
|
-
}
|
62
|
-
|
63
|
-
for (int i = 0; i < DIGIT_BUF; i++) {
|
64
|
-
|
65
|
-
for (int j = 0; j < DIGIT_BUF; j++) {
|
66
|
-
|
67
|
-
num[j + i] += num1[i] * num2[j];
|
68
|
-
|
69
|
-
}
|
70
|
-
|
71
|
-
}
|
72
|
-
|
73
|
-
for (int i = 0; i < DIGIT_BUF; i++) {
|
74
|
-
|
75
|
-
if (num[i] / 10) {
|
76
|
-
|
77
|
-
num[i + 1] += num[i] / 10;
|
78
|
-
|
79
|
-
num[i] = num[i] % 10;
|
80
|
-
|
81
|
-
}
|
82
|
-
|
83
|
-
}
|
84
|
-
|
85
|
-
}
|
86
|
-
|
87
|
-
|
88
|
-
|
89
53
|
int Digit(int* num)
|
90
54
|
|
91
55
|
{
|
92
56
|
|
93
|
-
int count = DIGIT_BUF-1;
|
57
|
+
int count = DIGIT_BUF - 1;
|
94
58
|
|
95
59
|
while (1) {
|
96
60
|
|
@@ -106,21 +70,65 @@
|
|
106
70
|
|
107
71
|
|
108
72
|
|
73
|
+
|
74
|
+
|
75
|
+
void ArrayMul(int* num1, int* num2, int* num)
|
76
|
+
|
77
|
+
{
|
78
|
+
|
79
|
+
int num1_digit = Digit(num1);
|
80
|
+
|
81
|
+
int num2_digit = Digit(num2);
|
82
|
+
|
83
|
+
for (int i = 0; i < DIGIT_BUF; i++) {
|
84
|
+
|
85
|
+
num[i] = 0;
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
for (int i = 0; i < num1_digit + 1; i++) {
|
90
|
+
|
91
|
+
for (int j = 0; j < num2_digit + 1; j++) {
|
92
|
+
|
93
|
+
num[j + i] += num1[i] * num2[j];
|
94
|
+
|
95
|
+
}
|
96
|
+
|
97
|
+
}
|
98
|
+
|
99
|
+
for (int i = 0; i < Digit(num) + 1; i++) {
|
100
|
+
|
101
|
+
if (num[i] / 10) {
|
102
|
+
|
103
|
+
num[i + 1] += num[i] / 10;
|
104
|
+
|
105
|
+
num[i] = num[i] % 10;
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
cout << " " << num1_digit << " ";
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
|
109
117
|
void Factorial(int number, int* num) {
|
110
118
|
|
111
119
|
int hoge1[DIGIT_BUF] = {}, hoge2[DIGIT_BUF] = {}, hoge3[DIGIT_BUF] = {};
|
112
120
|
|
113
121
|
ToArray(number, hoge3);
|
114
122
|
|
115
|
-
for (number; number; number--) {
|
123
|
+
for (number; number > 1; number--) {
|
116
124
|
|
117
125
|
memcpy(hoge1, hoge3, sizeof(int) * DIGIT_BUF);
|
118
126
|
|
119
127
|
ToArray(number - 1, hoge2);
|
120
128
|
|
121
|
-
|
129
|
+
ArrayMul(hoge1, hoge2, hoge3);
|
122
130
|
|
123
|
-
int count =
|
131
|
+
int count = Digit(hoge3);
|
124
132
|
|
125
133
|
cout << number - 1 << " ";
|
126
134
|
|
@@ -146,11 +154,9 @@
|
|
146
154
|
|
147
155
|
int result[DIGIT_BUF] = {};
|
148
156
|
|
149
|
-
int hoge;
|
150
157
|
|
151
158
|
|
152
|
-
|
153
|
-
|
159
|
+
Factorial(100, result);
|
154
160
|
|
155
161
|
|
156
162
|
|
1
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -86,7 +86,7 @@
|
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
int
|
89
|
+
int Digit(int* num)
|
90
90
|
|
91
91
|
{
|
92
92
|
|
@@ -106,7 +106,7 @@
|
|
106
106
|
|
107
107
|
|
108
108
|
|
109
|
-
void
|
109
|
+
void Factorial(int number, int* num) {
|
110
110
|
|
111
111
|
int hoge1[DIGIT_BUF] = {}, hoge2[DIGIT_BUF] = {}, hoge3[DIGIT_BUF] = {};
|
112
112
|
|