java 有没有一种方法可以过滤输出,以便只给出最大的数字?

8ftvxx2r  于 2023-03-21  发布在  Java
关注(0)|答案(2)|浏览(140)
import java.util.Scanner;

public class Main
{
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
     
        System.out.println ("Please Enter Your Integer");
         int X = input.nextInt();
         int X1 = input.nextInt();
         for(int i = 1; i <= X && i <= X1; i++) 
            { 
                 if(X%i==0 && X1%i==0) { 
                     int GCD = i;
                     System.out.printf("GCD of %d and %d is: %d", X, X1, GCD);  
                  
                 }
            }
    
    }
}

'
这段代码的问题是for函数一直在运行程序,所有的公约数都被打印出来了,我想过滤掉较小的数字,只打印最大的公约数。
我试过反转for函数,但这会搞砸Eucladian算法

unhi4e5o

unhi4e5o1#

你可以调用一个helper函数:

int gcdByEuclidsAlgorithm(int n1, int n2) {
    if (n2 == 0) {
        return n1;
    }
    return gcdByEuclidsAlgorithm(n2, n1 % n2);
}

这将返回GCD并且具有更好的时间复杂度。

nszi6y05

nszi6y052#

GCD变量声明移到for循环之前,将print语句移到for循环之后,应该可以工作。因为GCD是在循环结束时除xx1的最大数。

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) {
         Scanner input = new Scanner(System.in);
     
         System.out.println ("Please Enter Your Integer");
         int X = input.nextInt();
         int X1 = input.nextInt();
         int GCD = 1;
         for(int i = 1; i <= X && i <= X1; i++) 
            { 
                 if(X%i==0 && X1%i==0) { 
                     GCD = i;
                 }
            }
          
         System.out.printf("%d", GCD);
    
    }
}

相关问题