簡體   English   中英

我編寫了代碼來計算最大公約數,但是有問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM