回答編集履歴

2

複数行のためのループを忘れてた

2016/01/13 02:10

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -18,17 +18,21 @@
18
18
 
19
19
  Scanner data = new Scanner(System.in);
20
20
 
21
- long a = data.nextLong();
21
+ while(data.hasNextLong()){
22
22
 
23
- long b = data.nextLong();
23
+ long a = data.nextLong();
24
24
 
25
- long gcd = gcd(a, b);
25
+ long b = data.nextLong();
26
26
 
27
+ long gcd = gcd(a, b);
28
+
27
- long lcm = a * b / gcd;
29
+ long lcm = a * b / gcd;
28
30
 
29
31
 
30
32
 
31
- System.out.println(gcd+" "+lcm);
33
+ System.out.println(gcd+" "+lcm);
34
+
35
+ }
32
36
 
33
37
  }
34
38
 

1

回答変更、再帰のススメ

2016/01/13 02:10

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,3 +1,49 @@
1
- 標準入力から入力で、Scannerの判定意図したもでなかもしれせん
1
+ ozwkさん回答まさにそ通りだと思いますね
2
2
 
3
+ 個人的にはこういう紛れをなくすためにも再帰関数で定義したほうが良いと思います。
4
+
5
+
6
+
7
+ ```java
8
+
9
+ import java.util.Scanner;
10
+
11
+
12
+
13
+ public class Main {
14
+
15
+
16
+
17
+ public static void main(String[] args) {
18
+
19
+ Scanner data = new Scanner(System.in);
20
+
21
+ long a = data.nextLong();
22
+
23
+ long b = data.nextLong();
24
+
25
+ long gcd = gcd(a, b);
26
+
27
+ long lcm = a * b / gcd;
28
+
29
+
30
+
31
+ System.out.println(gcd+" "+lcm);
32
+
33
+ }
34
+
35
+ }
36
+
37
+
38
+
3
- whileの判定を`hasNextInt()`にしてみるとどうでしょうか?
39
+ public static long gcd(long a, long b){
40
+
41
+ return b == 0 ? a : gcd(b, a % b);
42
+
43
+ }
44
+
45
+
46
+
47
+ }
48
+
49
+ ```