質問するログイン新規登録

回答編集履歴

1

説明の訂正 コードの訂正

2018/07/12 09:28

投稿

退会済みユーザー
answer CHANGED
@@ -38,18 +38,8 @@
38
38
 
39
39
  2.約分
40
40
 
41
- 最大公約数を求める際、
41
+ 最大公約数を求める際、その個所をメソッドに切り出しました。
42
42
 
43
- まず、帯分数の場合も考慮し、整数部分を求めます.
44
- そうすると、必ず分数のところの分子が分母より小さくなります.
45
- すると、**変数**```i```**を2から分子までループさせ その間で分母、分子ともに割り切れる**```i```**の最大値が ```tmp```となります。
46
-
47
- まず最初に変数```tmp = 1```と初期化します。
48
- こうすることでもし、1以上の自然数で約分できない場合も対応できます。
49
- 初期化しないので後でエラーができるので初期化します。
50
-
51
- そして、分子、分母を```tmp```で割ればいいです。(ここで```tmp = 1```という初期化が効いてくる)
52
-
53
43
  3.後は、答えが真分数になるのか、整数になるのかをif文を使って分岐させればよいでしょう。
54
44
 
55
45
  約分は済ませたので答えは
@@ -78,7 +68,7 @@
78
68
 
79
69
  public class Main {
80
70
  public static void main(String[] args){
81
-
71
+ // Your code here!
82
72
  Random rand = new Random();
83
73
  int []data = new int[4];
84
74
  String []text = {"分子","分母"};
@@ -97,22 +87,14 @@
97
87
  num = num % den;
98
88
 
99
89
  //System.out.println(num + " " + den);
100
- int tmp = 1;
101
- if(num > 0){
102
- for(int i = 2; i <= num; i++){
90
+ int tmp = my_gcd(num,den);
103
- if(num % i == 0 && den % i == 0){
104
- tmp = i;
105
- }
106
- }
107
- }
108
91
  num /= tmp;
109
92
  den /= tmp;
110
93
 
111
94
  System.out.print(data[0] + " / " + data[1] + " + " + data[2] + " / " + data[3] + " = ");
112
-
113
- //答えが整数
95
+
114
96
  if(integerPart > 0){
115
- System.out.print(integerPart);//答えが整数
97
+ System.out.print(integerPart);
116
98
  if(num > 0){
117
99
  System.out.print(" and ");
118
100
  }
@@ -120,7 +102,18 @@
120
102
  if(num > 0){
121
103
  System.out.println(num + " / " + den);
122
104
  }
105
+
123
106
 
124
107
  }
108
+ public static int my_gcd(int a, int b){
109
+
110
+ int r = a % b;
111
+ while (r != 0) {
112
+ a = b;
113
+ b = r;
114
+ r = a % b;
115
+ }
116
+ return b;
117
+ }
125
118
  }
126
119
  ```