打印GCD时出现错误

时间:2018-03-26 02:29:00

标签: java loops

  

我遇到了一个问题,即输入两个数字并打印   他们的GCD(最大的共同除数)。

这是我写的代码:

import java.io.*;
class gcd {

   public static void main(String args[]) throws IOException{ 

       static int m=0;
       static int gcd=0;

       BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       System.out.println("Enter two integers");
       String s1=br.readLine();
       int g1=Integer.parseInt(s1);
       String s2=br.readLine();
       int g2=Integer.parseInt(s2);
       int maxim=Math.max(g1,g2);
       int minim=Math.min(g1,g2);

       while(m!=0){
           m = maxim % minim;
           if(m == 0){
               gcd=minim;
           }
           maxim=minim;
           minim=m;
        }
        System.out.println("GCD="+minim);

        }
    }

如果我输入两个数字,例如2545,则GCD结果应为5。但是,输出结果为25

请在我的代码中找出错误。

2 个答案:

答案 0 :(得分:0)

首先,我建议创建一个函数,然后进行计算。

您的代码不正确

maxim = 45
minim = 25
m = maxim %minim // m=45%25 = 20
m !=0
maxim = minim // maxim=minim=25
m=minim // m=25

//In your next iteration
maxim=25
minim=25
m = maxim %minim // m=25%25 = 0
m==0 
gcd= minim // i.e 25

所以,你的代码不正确

试试这个 -

public static void gcd(int a, int b)
{
   if(a==b)
      return a;
   else if(a>b)
      return gcd(a-b,b);
   else
      return gcd(a,b-a);
}

答案 1 :(得分:0)

你应该仍然得到编译错误,声明'm'和'gcd'为静态。您不需要将它们声明为静态。

你遇到的另一个问题是,你正在将m初始化为0,而while循环语句是

   while(m!=0){

因为条件'm!= 0'为假,所以while循环甚至不会执行一次。这解释了当输入为45和25时输出为25的原因。考虑使用do-while循环,以便循环至少执行一次。另一个错误是你的最终打印声明是打印'minim'的值,这是你想要的吗?您不应该打印存储最终gcd值的变量。我已经给了你所有的提示,让你满意自己修复错误!