我遵循了这个计算给我的逻辑,但它似乎只会给我一个无尽的循环。我能得到一些帮助吗?
我应该用的逻辑是:
求两个正整数x和y的最大公约数的公式遵循欧几里德算法如下:1。重复从y中减去x,直到y
这是我的代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package project4.pkg3;
/**
*
* @author LMFS
*/
import java.util.Scanner;
public class Project43 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int numOne, numTwo;
String c = "";
Scanner sc = new Scanner(System.in);
String another = "y";
while (another.equalsIgnoreCase("y")) {
System.out.println("Enter first number: ");
numOne = sc.nextInt();
System.out.println("Enter second number: ");
numTwo = sc.nextInt();
c = doMath(numOne, numTwo);
//use static method here.
System.out.println("Greatest common divisor: " + c);
System.out.println();
System.out.println("Continue? (y/n): ");
another = sc.next();
}
}
public static String doMath(int numOne, int numTwo) {
while (numOne != 0) {
System.out.println("//debugging line 48: " + numOne);
while (numTwo > numOne) {
numTwo -= numOne;
System.out.println("//debugging line 52: " + numTwo);
}
while (numOne > numTwo) {
numOne -= numTwo;
System.out.println("//debugging line 57: " + numOne);
}
}
return Integer.toString(numTwo);
}
}
编辑:解决了,我把静态方法改成这样:
public static int egcd(int a, int b) {
if (a == 0)
return b;
while (b != 0) {
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
在方法doMath
中进行此修复:
// Until one of the numbers divides by other
while (numOne % numTwo != 0 && numTwo % numOne != 0) {
而不是:
while (numOne != 0) {
在回来之前做些改变
int result = numOne / numTwo == 0 ? numOne : numTwo;
return Integer.toString(result);
在控制台上,我得到了以下结果:
Enter first number:
14
Enter second number:
49
... some debugging log
Greatest common divisor: 7
小贴士:我一直认为,当数字相等时,欧几里德算法就会失效。找到的号码是GCD。
另外,我认为在主计算循环中不需要几个循环。尝试用if
语句替换它们。因此,更容易找到错误(尝试使用数字1和1运行程序)
按照您实现算法的方式,无论是numOne
还是numTwo
都可以先达到零。但是,如果numTwo
在numOne
之前达到零,那么doMath
中的第二个嵌套循环将永远不会退出,因为该条件始终为真。
解决这个问题的一个方法就是
if (numTwo == 0) {
return numOne;
}
在两个嵌套循环之间。
此外,我建议删除整数。toString
从这个方法的返回中提取一部分,让它返回一个int
或整数,而不是
字符串
。
问题内容: 我已经看到存在这样的功能,即。是否有在Java中的其它功能也适用于其他类型的工作(,或)?似乎这是有意义的(带有各种重载),但是它不存在。在别的地方吗? (请不要将此问题与“我如何自己实现”混淆!) 问题答案: 对于int和long而言,作为原语,并非如此。对于Integer,有人可能写了一个。 假设BigInteger是int,Integer,long和Long的(数学/函数)超集,
我试图让这个程序计算两个用户输入的正整数(x和y)的最大公约数(GCD)。set函数不返回可以索引的列表。关于如何找到GCD有什么建议吗?
计算两个或两个以上数字/数字数组的最大公约数。 内部的 _gcd 函数使用递归。基本情况是,当 y 等于 0 的情况下,返回 x 。否则,返回 y 的最大公约数和x / y的其余数。 const gcd = (...arr) => { const _gcd = (x, y) => (!y ? x : gcd(y, x % y)); return [...arr].reduce((a, b)
本文向大家介绍java求最大公约数与最小公倍数的方法示例,包括了java求最大公约数与最小公倍数的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java求最大公约数与最小公倍数的方法。分享给大家供大家参考,具体如下: Gongyueshu.java文件: 此处需要由控制台输入参数,eclipse环境运行的设置步骤为Run》Run Configurations进入运行的调试配置界面
我的任务是接受两个分数并求和,然后以最简单的形式返回。 出于某种原因,“gcd=i执行时不运行,因此我的程序在运行时进入无限循环。
Python3 实例 以下代码用于实现最大公约数算法: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # 定义一个函数 def hcf(x, y): """该函数返回两个数的最大公约数""" # 获取最小值 if x > y: smaller = y else: smaller = x for i in range