回答編集履歴

1

説明の訂正 コードの訂正

2018/07/12 09:28

投稿

退会済みユーザー
test CHANGED
@@ -78,27 +78,7 @@
78
78
 
79
79
 
80
80
 
81
- 最大公約数を求める際、
81
+ 最大公約数を求める際、その個所をメソッドに切り出しました。
82
-
83
-
84
-
85
- まず、帯分数の場合も考慮し、整数部分を求めます.
86
-
87
- そうすると、必ず分数のところの分子が分母より小さくなります.
88
-
89
- すると、**変数**```i```**を2から分子までループさせ その間で分母、分子ともに割り切れる**```i```**の最大値が ```tmp```となります。
90
-
91
-
92
-
93
- まず最初に変数```tmp = 1```と初期化します。
94
-
95
- こうすることでもし、1以上の自然数で約分できない場合も対応できます。
96
-
97
- 初期化しないので後でエラーができるので初期化します。
98
-
99
-
100
-
101
- そして、分子、分母を```tmp```で割ればいいです。(ここで```tmp = 1```という初期化が効いてくる)
102
82
 
103
83
 
104
84
 
@@ -158,7 +138,7 @@
158
138
 
159
139
  public static void main(String[] args){
160
140
 
161
-
141
+ // Your code here!
162
142
 
163
143
  Random rand = new Random();
164
144
 
@@ -196,56 +176,62 @@
196
176
 
197
177
  //System.out.println(num + " " + den);
198
178
 
199
- int tmp = 1;
179
+ int tmp = my_gcd(num,den);
180
+
181
+ num /= tmp;
182
+
183
+ den /= tmp;
184
+
185
+
186
+
187
+ System.out.print(data[0] + " / " + data[1] + " + " + data[2] + " / " + data[3] + " = ");
188
+
189
+
190
+
191
+ if(integerPart > 0){
192
+
193
+ System.out.print(integerPart);
194
+
195
+ if(num > 0){
196
+
197
+ System.out.print(" and ");
198
+
199
+ }
200
+
201
+ }
200
202
 
201
203
  if(num > 0){
202
204
 
203
- for(int i = 2; i <= num; i++){
204
-
205
- if(num % i == 0 && den % i == 0){
206
-
207
- tmp = i;
208
-
209
- }
210
-
211
- }
212
-
213
- }
214
-
215
- num /= tmp;
216
-
217
- den /= tmp;
218
-
219
-
220
-
221
- System.out.print(data[0] + " / " + data[1] + " + " + data[2] + " / " + data[3] + " = ");
222
-
223
-
224
-
225
- //答えが整数
226
-
227
- if(integerPart > 0){
228
-
229
- System.out.print(integerPart);//答えが整数
230
-
231
- if(num > 0){
232
-
233
- System.out.print(" and ");
234
-
235
- }
236
-
237
- }
238
-
239
- if(num > 0){
240
-
241
205
  System.out.println(num + " / " + den);
242
206
 
243
207
  }
244
208
 
209
+
210
+
245
211
 
246
212
 
247
213
  }
248
214
 
215
+ public static int my_gcd(int a, int b){
216
+
217
+
218
+
219
+ int r = a % b;
220
+
221
+ while (r != 0) {
222
+
223
+ a = b;
224
+
225
+ b = r;
226
+
227
+ r = a % b;
228
+
229
+ }
230
+
231
+ return b;
232
+
233
+ }
234
+
249
235
  }
250
236
 
251
237
  ```