我是这里的新网站,我希望我在这里度过愉快的时光。我目前正在做一个任务,目前卡在第一个问题,程序要求两个整数,以计算和显示最大的公约数,或GCD。
根据问题:
计算GCD的经典算法,称为Euclid算法 如下:让m和n为包含两个数的变量。如果n为0,则停止;米 包含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,几乎就像忽略了它在while循环期间应该进行的计算:
Enter two integers: 12 28
Greatest Common Divisor: 12
何时显示,根据样本输出:
Enter two integers: 12 28
Greatest Common Divisor: 4
我有什么问题吗?
答案 0 :(得分:2)
m = n;
n = m % n;
m
变为n
,然后n
变为m % n
m % m
:始终为零。您需要同时执行此操作(在C中不可能,因为它没有并发分配),或者使用临时变量:
t = m;
m = n;
n = t % n;
答案 1 :(得分:1)
else
中的while loop
语句使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);
}
}}
您可以这样做以保持代码简单
parseInt()