2017-02-09 1 views
2

Привет, люди, я сделал код для вычисления наибольшего общего делителя из 2-х чисел.Я сделал код для вычисления наибольшего общего делителя, но есть проблема

Это хорошо работает, но я получаю много выходов. Я хочу получить наибольшую производительность, но я не знаю, как это исправить?

Что мой код делает это здесь: вы вводите 2 целых числа. Первое целое число должно быть больше второго. Теперь сначала проверьте код второго целого. Разделяется ли оно на 1, 2, 3, 4, 5, .. Затем код проверяет все рабочие числа с первым номером. В итоге у нас наибольший общий делитель.

И до того, как код сделает все это, он проверяет, сначала ли второе число делит (в случае второго - gcd).

Теперь моя проблема: Давайте ввод 36 и 14. Мой код даст OUTPUT

1 
2 

Но как я могу избежать код печатать все другие рабочие номера? Я только хочу напечатать наибольший рабочий номер, но не знаю, как реализовать это в моем коде? Я также не хочу копировать другой код, потому что я все сделал сам и горжусь:

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

Просто для записи ... поскольку я дал вам этот первый намек; подумайте о том, чтобы мой ответ тоже понравился ... как только вы достигнете уровня поддержки. Uups, вы только что сделали ;-) – GhostCat

+0

@GhostCat Эй, кот, я даю тебе верх, потому что вчера я тренируюсь, но теперь я снова благодарю тебя за ответ на мой другой вопрос !! – mogulba

+0

Не стесняйтесь завтра. Сегодня я уже попал в ежедневную кепку; с другой стороны: просто делайте то, что работает для вас. Один 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 и использовать целые числа вместо двух значений для ваших значений.

+0

, но не понимают значениеOf? i пишу gcd = ((int) i); вместо этого он работает так же – mogulba

+0

@mogulba Это из-за автоматического бокса. Где: ваш счетчик циклов * i * должен иметь тип ** int ** в первую очередь. Понятно, что в первую очередь это должно быть ** не **. Другими словами: отступите назад и посмотрите, какие типы вы используете в первую очередь. FInally: UPPERCASE воспринимается как СКРИМИНГ в Интернете.Таким образом: RUDE! Не делай этого. – GhostCat

2

Вы должны изменить свой код; например, вот так:

В настоящее время ваш код просто печатает каждый раз, когда находит «совпадение».

Вместо немедленной печати вы нажимаете это значение в помощник переменная. И в конце; когда ваша петля закончилась, вы просто печатаете то, что хелпер переменная!

Затем вы автоматически печатаете последний номер, который вы вычислили и сохранили ваш алгоритм.

(я не даю вам никакого кода здесь, только идея - как вы узнаете больше, написав код самостоятельно!)

+0

СПАСИБО, НО НЕТ НИКАКИХ ИЗУЧЕННЫХ ДРУГИХ МЕТОДОВ, Я НЕ ХОЧУ ДЕЛАТЬ ЭТО, НО СПАСИБО ДЛЯ ПОМОЩИ МЕНЯ :) – mogulba

Смежные вопросы