20151126


*이문제는 dovelet 에 있는 알고리즘 문제입니다.



분수 크기 비교/compare 



프로그램 명: comparefrac

제한시간: 1 초


a/b 와 c/d 의 대소를 판단하는 프로그램이다.

입력

자연수 a , b, c ,d 가 입력으로 주어진다. 입력되는 수는 10000 이하이다.

출력

  • a/b > c/d 이면 1
  • a/b = c/d 이면 0
  • a/b < c/d 이면 -1

을 출력한다.

입출력 예

입력

3 4 5 6

출력

-1




제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;
  
public class Main {
   
    Scanner sc = new Scanner(System.in);
    static PrintStream p = System.out;
    double a;
    double b;
    double c;
    double d;
      
    public static void main(String[] args) {
        Main m = new Main();
        m.input();
        m.Output();
    }
    void input(){
        a = sc.nextInt();
        b = sc.nextInt();
        c = sc.nextInt();
        d = sc.nextInt();
    }
    void Output(){
        a = a/b;
        c = c/d;
        if(a > c){
            p.print("1");
        }else if(a == c){
            p.print("0");
        }else{
            p.print("-1");
        }
    }  
}




*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.


분수의 크기를 비교하는 문제 입니다. 정수형인 int 값으로 분수 형태를 저장하게 되면 몫

나눈 몫 값만 남게 되기 때문에 분수의 크기를 비교 할 수 없습니다. 그래서 저는 실수 값도 받는

Double 형으로 받아서 문제를 해결했습니다.


좀 더 수학적인 방법으로는 아래와 같은 흰트 개념을 참고해서 분수의 크기를 정수로 처리가 가능합니다.
컴퓨터에서 가능하면 실수처리를 피하는게 좋다고 하니 흰트 개념을 잘 이용해 보세요.



아래 흰트 개념이 있습니다. 




흰트 개념



분수크기 비교 hint

입력되는 수가 정수이므로 정수로 입력을 받습니다.   
1
scanf("%d %d %d %d",&a,&b,&c,&d); //  a/b , c/d
두 분수를 통분하면

b*d 의 부호는 양수이므로 분자의 a*d - b*c 가 양수인지 0 인지 음수인지만 판단하면 됩니다.

컴퓨터에서 정수처리가 가능하다면 실수처리를 피하는 게 좋습니다. 실수연산의 결과는 완전히 신뢰할수가 없습니다.






+ Recent posts