回答編集履歴
1
説明の訂正 コードの訂正
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
|
-
|
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
|
```
|