[英]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);
}
}
}
}
}
}
您必須更改代碼; 例如這樣的:
當前,您的代碼在每次找到“匹配項”時都只是在打印。
無需立即打印,您可以將該值壓入一個輔助變量中。 最后 當循環結束時,您只需打印該幫助程序變量!
然后,您將自動打印算法計算和存儲的最后一個數字。
(我在這里沒有給您任何代碼;只是一個主意-因為您將自己編寫代碼會學到更多!)
而不是打印,將結果保存在一個臨時變量中
double first=0;
int greatestCommonDivisor = 1;
...
if(temp==(int)temp){
greatestCommonDivisor = Double.valueOf(i).intValue();
}
...
System.out.println("Greatest common divisor:" + greatestCommonDivisor);
就是說,您的算法和代碼可以在很多地方得到改進。 首先,您應該考慮從可能的最大數字開始,直到找到第一個公約數(因為那是最大的)而停止,而不是從最小的可能數字開始循環遍歷所有可能的數字。 您應該看一下模運算,並使用整數而不是雙精度值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.