이클립스 최대공약수구하는코딩인대 최대공약수 12가안나오는이유점요


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

  1. List item`

여기에 코드를 입력하세요

`

  • 2018년 02월 04일에 작성됨

조회수 94


20180214banner blockchain

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을 증가하시는 코드를 작성하셨습니다. 문제가 몇 가지 있는데,

  1. 자료형 double은 소수를 담습니다. 소수점으로 나누어지는게 가능합니다. 예를 들어 x의 값이 6.0, y의 값이 9.0일 때 division이 2.0면 각각 3.0과 4.5로 나뉘어 질 수 있습니다. 최대공약수를 구하는 데에 부적합한 자료형인 것으로 보입니다.
  2. 실행해보시면 아예 아무 것도 프린트 되지 않는데, 이 코드는 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 + "입니다.");
    }

}

이렇게 해보실 수 있겠습니다.

  • 2018년 02월 05일에 작성됨
    내공냠냠


x , y 에 무슨 값이 들어가든 1로는 딱 나눠 떨어지기 때문입니다.

  • 2018년 02월 05일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close