当前位置: 首页 > 知识库问答 >
问题:

要求两个整数来获得最大公约数(GCD)?

刁越
2023-03-14

我是新来这个网站的,希望在这里玩得开心。我现在正在做一个作业,现在我被困在第一个问题上,程序要求两个整数来计算和显示最大公约数(GCD)。

根据问题:

计算GCD的经典算法,称为欧几里德算法,如下所示:设m和n为包含这两个数字的变量。如果n为0,则停止;m包含GCD。否则,当m除以n时,计算余数。将n复制到m中,并将余数复制到n中。然后重复该过程,从测试n是否为0开始。

有了这个提示,我决定按如下方式编写代码:

#include <stdio.h>
int main() {
int first, second, m, n, GCD = 0;
printf("Enter two integers: ");
scanf("%d%d", &first, &second);
if (first > second) {
    m = first;
    n = second;
} else {
    m = second;
    n = first;
}
while(1) {
    if (n == 0) {
        GCD = m;
        break;
    } else {
        m = n;
        n = m % n;
    }
} 
printf("Greatest Common Divisor: %d\n", GCD);
}

但是由于某种原因,GCD总是打印出较小的整数n,几乎就像它忽略了它应该在同时循环中进行的计算一样:

Enter two integers: 12 28
Greatest Common Divisor: 12

应显示的时间,根据样本输出:

Enter two integers: 12 28
Greatest Common Divisor: 4 

我做错什么了吗?

共有2个答案

花永昌
2023-03-14

你的else语句在你的while循环中使n=0,因为你声明m=n,然后继续执行n=m%n,这是根据你的程序n=n%n

你可以这么做来保持代码简单

/* Finds the greatest common divisor of 2 numbers inputted */
#include <stdio.h>

int main() {

    int m, n, rem;

    printf("\nEnter the two integers:  ");
    scanf("%d%d", &m, &n);

    while (n != 0) {

        rem = m % n;

        m = n;
        n = rem;

    }

    printf("\n\nGreatest common divisor: %d\n\n", m);

}
巫马山
2023-03-14
m = n;
n = m % n;

m变成n,然后n变成m%n,即m%m:始终为零。您需要同时执行(在C中不可能,因为它没有并发赋值),或者使用临时变量:

t = m;
m = n;
n = t % n;
 类似资料:
  • 问题内容: 我已经看到存在这样的功能,即。是否有在Java中的其它功能也适用于其他类型的工作(,或)?似乎这是有意义的(带有各种重载),但是它不存在。在别的地方吗? (请不要将此问题与“我如何自己实现”混淆!) 问题答案: 对于int和long而言,作为原语,并非如此。对于Integer,有人可能写了一个。 假设BigInteger是int,Integer,long和Long的(数学/函数)超集,

  • 本文向大家介绍python如何求解两数的最大公约数,包括了python如何求解两数的最大公约数的使用技巧和注意事项,需要的朋友参考一下 题目: 给定两个自然数,求这两个数的最大公约数。 分析: 单看题目的话,非常简单,我们可以循环遍历自然数,如果能够整除两个自然数,就把这个数记下来,在这些记录中找到最大的一个。 但是这样做有几个缺点:一是做除法计算量比较大,二是遍历所有自然数完全没有必要。另外,如

  • 本文向大家介绍Python自定义函数实现求两个数最大公约数、最小公倍数示例,包括了Python自定义函数实现求两个数最大公约数、最小公倍数示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python自定义函数实现求两个数最大公约数、最小公倍数。分享给大家供大家参考,具体如下: 1. 求最小公倍数的算法: 最小公倍数  =  两个整数的乘积 /  最大公约数 所以我们首先要求出两个整数的

  • 我试图让这个程序计算两个用户输入的正整数(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)

  • 本文向大家介绍Python实现利用最大公约数求三个正整数的最小公倍数示例,包括了Python实现利用最大公约数求三个正整数的最小公倍数示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现利用最大公约数求三个正整数的最小公倍数。分享给大家供大家参考,具体如下: 在求解两个数的小公倍数的方法时,假设两个正整数分别为a、b的最小公倍数为d,最大公约数为c。存在这样的关系d=a*b