java - 用Java展示GCD的全过程
问题描述
我对 Java 并不陌生(几年前学习过,但由于工作原因停止了 5-6 年),我正试图再次与它取得联系。我的一个朋友给了我可以练习的练习题,但这对我来说很难。它基本上显示了使用欧几里得算法找到 GCD 的步骤。我做了所有事情,但是一旦我输入了一个大数字,GCD 所需的最后一个细节就丢失了。
这是我到目前为止所做的代码:
import java.util.Scanner;
class mpONE {
public static void main (String[] args)
{
System.out.println("Finding GCD Using Euclid's Algorithm");
Scanner num = new Scanner(System.in);
System.out.println("Enter your first (higher) number: ");
int n1 = num.nextInt();
System.out.println("Enter your second (lower) number: ");
int n2 = num.nextInt();
System.out.println("Numbers for finding GCD are: " + n1 + " " + n2);
System.out.println("Computing for GCD... ");
for (int i = 0; i <= n2; i++)
{
int g = n1/n2;
int f = (g * n2);
int h = n1 - f;
System.out.print(n1 + " = " + "(" + n2 + " * " + g + ") + " + h);
n1 = n2;
n2 = h;
System.out.println();
if (h == 0)
{
break;
}
}
for (int i = 1; i <= n1 && i <= n2; ++i) {
if (n1 % i == 0 && n2 % i == 0)
{
int ans = i;
System.out.println("Your GCD is " + ans);
}
}
}
}
对于较小的数字,它确实有效(“+ h”应该为 0),但对于大数字,它会在显示 0 余数之前停止。谢谢你的帮助!
解决方案
只需更改if(h==0)
块的位置:
import java.util.Scanner;
class mpONE {
public static void main (String[] args)
{
System.out.println("Finding GCD Using Euclid's Algorithm");
Scanner num = new Scanner(System.in);
System.out.println("Enter your first (higher) number: ");
int n1 = num.nextInt();
System.out.println("Enter your second (lower) number: ");
int n2 = num.nextInt();
System.out.println("Numbers for finding GCD are: " + n1 + " " + n2);
System.out.println("Computing for GCD... ");
for (int i = 0; i <= n2; i++)
{
int g = n1/n2;
int f = (g * n2);
int h = n1 - f;
System.out.print(n1 + " = " + "(" + n2 + " * " + g + ") + " + h);
System.out.println();
if (h == 0)
{
break;
}
n1 = n2;
n2 = h;
}
for (int i = 1; i <= n1 && i <= n2; ++i) {
if (n1 % i == 0 && n2 % i == 0)
{
int ans = i;
System.out.println("Your GCD is " + ans);
}
}
}
}
推荐阅读
- vue.js - 切换语言 VueI18n
- angular - 具有包含“:”的属性的 Json 响应
- spring-boot - 如何在 WildFly 10 中将爆炸战争部署为文件夹
- google-cloud-dataflow - PubSub 水印不前进
- git - 如何通过 azure cli 执行我的 git 存储库中的 shell 脚本
- php - php 7.0 不上传文件
- c# - 如何在针对 SQL Server 执行之前使用 AutoMapper 过滤列
- php - 如何在 laravel 5.3 中使用插入存储过程获取插入的 ID?
- c - epoll:使用具有许多 fd 的结构表时如何识别哪个 fd 已准备就绪
- angular - 反应式表单电子邮件字段验证未正确进行