2017-02-09 10 views
2

안녕하세요, 저는 2 개의 숫자 중 가장 큰 공약수를 계산하는 코드를 만들었습니다.나는 최대 공약수를 계산하는 코드를 만들었지 만, 문제가있다.

잘 작동하지만 출력이 많습니다. 나는 가장 큰 산출량을 원하지만 나는 그것을 고치는 방법을 모른다.

여기 내 코드는 무엇입니까? 2 정수를 입력하십시오. 첫 번째 정수는 두 번째 정수보다 커야합니다. 이제 코드에서 두 번째 정수를 먼저 확인하십시오. 그것은 1, 2, 3, 4, 5, ...로 나눌 수 있습니까? 그렇다면 코드는 모든 작동 숫자를 첫 번째 숫자로 확인하십시오. 결국 우리에게는 가장 큰 공통 제수가 있습니다.

코드가 모두 처리하기 전에 두 번째 숫자가 먼저 나뉘어 지는지 확인합니다 (두 번째가 gcd 인 경우). 이제

내 문제 :의 출력을

1 
2 

을 줄 것이다 입력 (36) 및 (14) 내 코드를 보자하지만 내가 어떻게 코드가 다른 모든 작업 번호를 인쇄하지 않도록 할 수 있습니까? 가장 훌륭한 작업 번호를 인쇄하고 싶지만 내 코드에서이를 어떻게 구현할 것인지 생각할 필요가 없습니다. 나는 내가 여기까지 자부심을 가지고 자랑스러워하기 때문에 다른 코드를 복사하는 것을 원하지 않습니다.

import java.util.Scanner; 

public class Testit{ 

    public static void main(String[] args){ 

     Scanner input = new Scanner(System.in); 
     double x = input.nextDouble(); 
     double y = input.nextDouble(); 
     double first=0; 

     first=x/y; 

     if(first==(int)first){ 
      System.out.println((int)y); 
      return; 
     } 

     else{ 
      for(double i=1; i<x && i<y; i++){ 
       double sum=0; 
       sum=y/i; 

       if(sum==(int)sum){ 
        double temp=0; 
        temp=x/i; 
        if(temp==(int)temp){ 
         System.out.println((int)i); 
        } 
       } 
      } 
     } 
    } 
} 
+0

기록을 위해 ... 나는 당신에게 첫 번째 힌트를주었습니다. 너무 내 대답을 upvoting 고려하십시오 ... 당신이 upvote 수준에 도달하자마자. Uups, 방금 했어요 ;-) – GhostCat

+0

@GhostCat 안녕 고양이 나는 어제 내가 훈련하러 가기 때문에 지금 당신에게 upvote를 주지만, 이제 나는 또 다른 질문에 답하기 위해 당신에게 감사드립니다! – mogulba

+0

내일 upvote에 자유롭게 느끼십시오. 나는 이미 오늘 일일 상한을 쳤다. 반면에 : 단지 당신을 위해 일하는 것을하십시오. 하나의 upvote는 정확히 중요하지 않습니다 ;-) – GhostCat

답변

2

, 임시 변수

double first=0; 
int greatestCommonDivisor = 1; 
... 
       if(temp==(int)temp){ 
        greatestCommonDivisor = Double.valueOf(i).intValue(); 
       } 
... 
System.out.println("Greatest common divisor:" + greatestCommonDivisor); 
에 결과를 저장 -;

(단지 아이디어를 사용자가 직접 코드를 작성하여 자세한 내용을하므로 내가 여기 당신에게 어떤 코드를 포기하지 않을거야!)

즉, 알고리즘과 코드를 개선 할 수있는 장소가 많이 있습니다. 처음에는 가능한 가장 큰 수로 시작하고 가능한 가장 작은 수로 시작하여 가능한 모든 수를 반복하는 대신 첫 번째 공통 제수 (가장 큰 수이기 때문에)를 찾았을 때 중단하는 것을 고려해야합니다. 그리고 modulo 연산을 살펴보고 값에 대해 double 값 대신 정수를 사용해야합니다.

+0

하지만 이해할 가치가 없습니까? 나는 gcd = ((int) i)라고 쓰고; 대신 그것은 동일하게 작동합니다 – mogulba

+0

@mogulba 그것은 자동 권투 때문입니다. Where : 루프 카운터 * i *는 처음에 ** int ** 유형이어야합니다. 개념적으로, 그것은 처음에는 두 배가되지 않아야합니다 **. 다른 말로하면, 뒤로 물러나서 처음에 어떤 유형을 사용하고 있는지 살펴보십시오. FINally : UPPERCASE는 인터넷에서 SCREAMING으로 인식됩니다.따라서 : 불량! 그러지 마. – GhostCat

2

코드를 변경해야합니다. 예 :

현재 코드는 단순히 "일치"를 찾을 때마다 인쇄됩니다.

즉시 인쇄하는 대신 해당 값을 도우미 변수로 푸시합니다. 그리고 결국. 루프가 끝나면 도우미 변수를 인쇄하기 만하면됩니다.

그러면 알고리즘이 계산하고 저장 한 마지막 번호가 자동으로 인쇄됩니다. 대신 인쇄

+0

고맙습니다. 그러나 다른 방법을 배울 수는 없으므로이 일을 할 수는 없지만 도와 주셔서 감사합니다 :) – mogulba