質問編集履歴

3

ミス

2016/09/27 17:45

投稿

mentos109
mentos109

スコア28

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

記述ミス

2016/09/27 17:45

投稿

mentos109
mentos109

スコア28

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 165
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
- ArrayMul(hoge1, hoge2, hoge3);
129
+ ArrayMul(hoge1, hoge2, hoge3);
122
130
 
123
- int count = digit(hoge3);
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
- factorial(100, result);
159
+ Factorial(100, result);
154
160
 
155
161
 
156
162
 

1

誤字

2016/09/27 17:45

投稿

mentos109
mentos109

スコア28

test CHANGED
File without changes
test CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
 
88
88
 
89
- int digit(int* num)
89
+ int Digit(int* num)
90
90
 
91
91
  {
92
92
 
@@ -106,7 +106,7 @@
106
106
 
107
107
 
108
108
 
109
- void factorial(int number, int* num) {
109
+ void Factorial(int number, int* num) {
110
110
 
111
111
  int hoge1[DIGIT_BUF] = {}, hoge2[DIGIT_BUF] = {}, hoge3[DIGIT_BUF] = {};
112
112