質問編集履歴

6

文字

2020/11/30 12:13

投稿

assa
assa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -1,97 +1,3 @@
1
- ```C
2
-
3
- void convert(int n,int *list){
4
-
5
- int digit=0,c=n,k,y=1;
6
-
7
- while(c!=0){
8
-
9
- c=c/10;
10
-
11
- digit++;}
12
-
13
- for (k=1;k<digit;k++)
14
-
15
- y=y*10;
16
-
17
-
18
-
19
- for (;digit>0;digit--){
20
-
21
- arlist[digit-1]=n/y;
22
-
23
- n=n-(y*(n/y));
24
-
25
- y=y/10;
26
-
27
- }
28
-
29
- }
30
-
31
- void output(int digit,int *list){
32
-
33
-
34
-
35
- for (;digit>0;digit--){
36
-
37
- printf("%d",list[digit-1]);
38
-
39
-
40
-
41
- }
42
-
43
- }
44
-
45
- int multiply(int digit1,int digit2,int *list1,int *list2,int *listnew){
46
-
47
- int carry=0;
48
-
49
- int t,dit,j,i;
50
-
51
-
52
-
53
-
54
-
55
- for (i=0;i<digit1;i++){
56
-
57
- for (j=0;j<digit2;j++){
58
-
59
- listnew[i+j]=list1[i]*list2[j]+carry+listnew[i+j];
60
-
61
- carry=listnew[i+j]/10;
62
-
63
- listnew[i+j]=listnew[i+j]%10;
64
-
65
- }
66
-
67
- listnew[i+digit2]=listnew[i+digit2]+carry;
68
-
69
- carry = 0;
70
-
71
- }
72
-
73
- dit=digit1+digit2-1;
74
-
75
- if (listnew[dit]!=0)
76
-
77
- dit++;
78
-
79
-
80
-
81
-
82
-
83
- return dit;}
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
- ```
94
-
95
1
  これは multiplyとconvertを使って100の階乗を作ろうとしています。
96
2
 
97
3
  convertは整数を配列に格納する関数です。multiplyは2つの配列の積の値を新しい配列に入れる関数です。

5

文字

2020/11/30 12:13

投稿

assa
assa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -94,6 +94,8 @@
94
94
 
95
95
  これは multiplyとconvertを使って100の階乗を作ろうとしています。
96
96
 
97
+ convertは整数を配列に格納する関数です。multiplyは2つの配列の積の値を新しい配列に入れる関数です。
98
+
97
99
  どのように組み合わせることで100!をつくることができるでしょうか。
98
100
 
99
101
  アドバイスかヒントをぜひください。。

4

訂正

2020/11/30 09:45

投稿

assa
assa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -82,103 +82,9 @@
82
82
 
83
83
  return dit;}
84
84
 
85
- int main(void){
86
-
87
- int n1,n2,a,m=0,n=0,i=0,j;
88
-
89
- int list1[180]={0};
90
-
91
- int list2[180]={0};
92
-
93
- int list3[180]={0};
94
-
95
- int listnew[180]={0};
96
-
97
- int listnew1[180]={0};
98
-
99
- for (i=1;i<101;i=i+2){
100
85
 
101
86
 
102
87
 
103
- if (i==1){
104
-
105
- convert(i,list1);convert(i+1,list2);
106
-
107
- m=multiply(1,1,list1,list2,listnew);
108
-
109
- }
110
-
111
- else if (1<i<9){
112
-
113
- convert(i,list1);convert(i+1,list2);
114
-
115
- n=multiply(1,1,list1,list2,list3);
116
-
117
- m=multiply(m,n,listnew,list3,listnew1);
118
-
119
- for (j=0;j<=m;j++){
120
-
121
- listnew[j]=listnew1[j];
122
-
123
- list3[j]=0;
124
-
125
- listnew1[j]=0;}}
126
-
127
- else if (i==9){
128
-
129
- convert(i,list1);convert(i+1,list2);
130
-
131
- n=multiply(1,2,list1,list2,list3);
132
-
133
- m=multiply(m,n,listnew,list3,listnew1);
134
-
135
- for (j=0;j<=m;j++){
136
-
137
- listnew[j]=listnew1[j];
138
-
139
- list3[j]=0;
140
-
141
- listnew1[j]=0;}}
142
-
143
-
144
-
145
- else if (10<i<99){
146
-
147
- convert(i,list1);convert(i+1,list2);
148
-
149
- n=multiply(2,2,list1,list2,list3);
150
-
151
- m=multiply(m,n,listnew,list3,listnew1);
152
-
153
- for (j=0;j<=m;j++){
154
-
155
- listnew[j]=listnew1[j];
156
-
157
- list3[j]=0;
158
-
159
- listnew1[j]=0;}}
160
-
161
-
162
-
163
- else {
164
-
165
- convert(i,list1);convert(i+1,list2);
166
-
167
- n=multiply(2,3,list1,list2,list3);
168
-
169
- m=multiply(m,n,listnew,list3,listnew1);
170
-
171
-
172
-
173
- }}
174
-
175
-
176
-
177
-
178
-
179
- output(m,listnew1);
180
-
181
- return 0;}
182
88
 
183
89
 
184
90
 
@@ -188,24 +94,8 @@
188
94
 
189
95
  これは multiplyとconvertを使って100の階乗を作ろうとしています。
190
96
 
191
- 自分考えは、list1とlist2の積list3に入れる。返り値nはlist3の桁数。
97
+ ように組み合わせることで100!つくことができるでしょうか
192
98
 
193
- そして前の結果であるlistnewとlist3の積をlistnew1に入れる。mはlistnew1の桁数。
194
-
195
- 最後にlistnewにlistnew1を代入してlist3とlistnew1はすべて0にして、また次の計算を行うように使用とすることです。しかし、これがうまくいきません。
196
-
197
- この実行結果が00000000000000000000000000000000になってしまいます。
198
-
199
- 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
200
-
201
- となることが目標です。
202
-
203
- i==9のところからどうやらおかしくなっているようです。
204
-
205
- どうしてでしょうか。
206
-
207
- ヒントやアドバイスを頂けなでしょうか
99
+ アドバイスかヒントぜひください。
208
-
209
- 他のやり方でもぜひお願いします
210
100
 
211
101
  よろしくお願いいたします。

3

文字

2020/11/30 09:43

投稿

assa
assa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -200,6 +200,8 @@
200
200
 
201
201
  となることが目標です。
202
202
 
203
+ i==9のところからどうやらおかしくなっているようです。
204
+
203
205
  どうしてでしょうか。
204
206
 
205
207
  ヒントやアドバイスを頂けないでしょうか。

2

文字

2020/11/30 09:06

投稿

assa
assa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -204,4 +204,6 @@
204
204
 
205
205
  ヒントやアドバイスを頂けないでしょうか。
206
206
 
207
+ 他のやり方でもぜひお願いします
208
+
207
209
  よろしくお願いいたします。

1

文字

2020/11/30 08:48

投稿

assa
assa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -194,7 +194,11 @@
194
194
 
195
195
  最後にlistnewにlistnew1を代入してlist3とlistnew1はすべて0にして、また次の計算を行うように使用とすることです。しかし、これがうまくいきません。
196
196
 
197
- この実行結果0が多く並ぶだけのものになます。
197
+ この実行結果00000000000000000000000000000000になってしいます。
198
+
199
+ 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
200
+
201
+ となることが目標です。
198
202
 
199
203
  どうしてでしょうか。
200
204