我遇到了一个问题,即输入两个数字并打印 他们的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);
}
}
如果我输入两个数字,例如25
和45
,则GCD结果应为5
。但是,输出结果为25
。
请在我的代码中找出错误。
答案 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值的变量。我已经给了你所有的提示,让你满意自己修复错误!