我需要创建一个程序,使用以下公式查找两个用户输入的数字的最大公因数:
如果x> = y,则gcd(x,y)= gcd(x – y,y);如果x <y,则gcd(x,y)= gcd(x,yx)。
例如:gcd(72,54)= gcd(72 – 54,54)= gcd(18,54)由于72> 54,我们将72替换为72 – 54 = 18,并使用新值继续循环
迭代2:gcd(18,54)= gcd(18,54 – 18)= gcd(18,36)由于18 <54,我们将54替换为54 – 18 = 36,并使用新值继续循环
迭代3:gcd(18,36)= gcd(18,36 – 18)= gcd(18,18)由于18 <36,我们将36替换为36 – 18 = 18,并使用新值继续循环
迭代4:gcd(18,18)= gcd(18 – 18,18)= gcd(0,18)= 18由于18> = 18,我们将第一个18替换为18 – 18 = 0,因为其中一个值是0,我们不继续循环。非零值18是gcd。
这是我到目前为止的代码:
我收到错误消息“表达式的非法开头”。
首先,在您的逻辑中:
do {
int gcd1 = (num1-num2);
System.out.println(gcd1 + "," + num2);
}
while (num1 != 0 && num2 != 0);
return
}
您只是在不更新num1和num2的情况下打印出gcd1和num2。
还要考虑如何使用递归来解决此问题。
如果您坚持使用循环,则为while循环逻辑:
public static int greatestCommon(int a, int b)
{
while (a != 0 && b != 0)
{
if (a >= b)
{
a = a - b;
}
else
b = b - a;
}
if (a == 0) return b;
else return a;
}
请注意,您不需要使用do-while循环,因为在某些情况下不需要减法(如果它们之一或两者均为0)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句