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

标签 java math printing numbers greatest-common-divisor

大家好,我编写了计算 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);
                    }
                }
            }
        }
    }
}

最佳答案

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

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

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

关于java - 我编写了计算最大公约数的代码,但存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138318/

相关文章:

java - 当sonar对webapp进行分析时,它只是分析java代码吗?

c - C中的旋转程序

java - 如何打印单个 JPanel 的内容?

css - 从 IE9 中隐藏打印输出中的列

java - 删除句子前的第一个评论

java - 当外观和感觉发生变化时如何动态更改图标?

java - 访问用于 JAXRS 资源方法的默认 JAXB 编码器

linux - 对管道中的数字执行算术运算

c# - 这个振荡功能如何实现

printing - 打印机驱动程序是做什么的?如何拦截/获取它发送给打印机的数据/命令?