이클립스 최대공약수구하는코딩인대 최대공약수 12가안나오는이유점요
조회수 1226회
import java.util.*; public class area {
public static void main(String[] args) {
// TODO Auto-generated method stub
double x,y,division;
division=1;
Scanner input = new Scanner(System.in);
System.out.println("두개의정수를입력하시오");
x=input.nextDouble();
y=input.nextDouble();
while(x%division!=0&&y%division!=0)
{
++division;
}
System.out.println("최대공약수="+division);
}
}strong text
- List item`
여기에 코드를 입력하세요
`
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
System.out.println
을 활용하시면 코드가 어디서 시작해서 어디서 멈추는 지 확인하실 수 있습니다.// import java.util.*; public class area { public static void main(String[] args) { // TODO Auto-generated method stub double x,y,division; division=1; // Scanner input = new Scanner(System.in); // System.out.println("두개의정수를입력하시오"); x=24.0; // 테스트용 임의 x값 y=36.0; // 테스트용 임의 y값 while(x%division!=0&&y%division!=0) { System.out.println("현재 division의 값은 " + division + "입니다."); ++division; } } }
x와 y가 둘다 division으로 나뉘어졌을 때 나머지가 0이 아닐 때 (약수가 아닐 때) division을 증가하시는 코드를 작성하셨습니다. 문제가 몇 가지 있는데,
- 자료형 double은 소수를 담습니다. 소수점으로 나누어지는게 가능합니다. 예를 들어 x의 값이 6.0, y의 값이 9.0일 때 division이 2.0면 각각 3.0과 4.5로 나뉘어 질 수 있습니다. 최대공약수를 구하는 데에 부적합한 자료형인 것으로 보입니다.
- 실행해보시면 아예 아무 것도 프린트 되지 않는데, 이 코드는 division이 1일 때 while문의 조건문을 만족하지 못하고 종료된다는 것을 아실 수 있을 것입니다. x와 y는 둘 다 1로 나누어 떨어지기 때문입니다. 하지만 division의 초기값 변경으로 문제를 해결할 수 있는 건 아닌 것이, 이 코드는 division이 x의 약수가 아니면서, y의 약수도 아닐 때 while문이 작동하기 때문입니다. 그렇다고
!=
를==
로 바꿔도, division이 x와 y의 약수일 때 while문이 돌아가다가 약수가 아닌 수를 만나면 (예를 들어 x가 24, y가 36이고 division이 5일 때) 멈춰버립니다.
자료형을 정수형으로 바꾸고, 공약수를 최대공약수까지 증가시키려면
// import java.util.*; public class area { public static void main(String[] args) { // TODO Auto-generated method stub int x,y,division,gcd; division=1; // Scanner input = new Scanner(System.in); // System.out.println("두개의정수를입력하시오"); x=24; // 테스트용 임의 x값 y=36; // 테스트용 임의 y값 gcd=1; // 최대공약수를 담는 GCD 초기화 while(division<=x&&division<=y) { System.out.println("현재 division의 값은 " + division + "입니다."); if(x%division==0&&y%division==0) { System.out.println(division + "은 x와 y의 공약수입니다."); gcd = division; } ++division; } System.out.println("x와 y의 최대공약수는 " + gcd + "입니다."); } }
이렇게 해보세요
참고로 x와 y를 직접 division으로 나누고, 그 약수들을 다 곱해서 최대공약수를 구하는 방식은
// import java.util.*; public class area { public static void main(String[] args) { // TODO Auto-generated method stub int x,y,division,gcd; division=2; // Scanner input = new Scanner(System.in); // System.out.println("두개의정수를입력하시오"); x=24; // 테스트용 임의 x값 y=36; // 테스트용 임의 y값 gcd=1; // GCD == 최대공약수 while(division<=x&&division<=y) { System.out.println("현재 division의 값은 " + division + "입니다."); System.out.println("현재 x의 값은 " + x + ", y의 값은 " + y + "입니다."); if(x%division!=0||y%division!=0) { ++division; } else { x = x / division; y = y / division; gcd = gcd * division; } } System.out.println("x와 y의 최대공약수는 " + gcd + "입니다."); } }
이렇게 해보실 수 있겠습니다.
-
댓글 입력