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