我编写了代码来计算最大公约数,但存在问题

I made code to calculate greatest common divisor but there is issue

大家好,我编写了代码来计算 2 数的最大公约数。

效果很好,但我得到了很多输出。我想要最大的输出,但我不知道如何解决?

我的代码在这里做的是:你输入 2 个整数。第一个整数必须大于第二个。现在代码首先检查第二个整数。它可以被 1、2、3、4、5、.. 整除吗?然后用第一个数字检查所有工作数字的代码。最后我们有最大公约数。

在代码完成所有操作之前,它会检查第二个数字是否首先除以(如果第二个是 gcd)。

现在我的问题是:让我们输入 36 和 14。我的代码将给出输出

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);
                    }
                }
            }
        }
    }
}

您必须更改您的代码;例如像这样:

目前,您的代码只是在每次找到 "match" 时打印。

不是立即打印,而是将该值推送到 helper 变量中。最后;当循环结束时,您只需打印 helper 变量!

然后您会自动打印您的算法计算和存储的最后一个数字。

(我在这里没有给你任何代码;只是一个想法 - 因为你将通过自己编写代码来了解更多信息!)

不打印,而是将结果保存在临时变量中

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

也就是说,您的算法和代码有很多地方可以改进。首先,您应该考虑从尽可能大的数字开始,并在找到第一个公约数时停止(因为那将是最大的),而不是从可能的最小数字开始遍历所有可能的数字。你应该看看模运算并使用整数而不是双精度作为你的值。