我知道它非常简单,但我无法找出变量t
的用途。
int main() {
int a, b, x, y, t, gcd, lcm;
printf("Enter two integers\n");
scanf("%d%d", &x, &y);
a = x;
b = y;
while (b != 0) {
t = b;
b = a % b;
a = t;
}
gcd = a;
lcm = (x*y)/gcd;
printf("Greatest common divisor of %d and %d = %d\n", x, y, gcd);
printf("Least common multiple of %d and %d = %d\n", x, y, lcm);
return 0;
}
如果我删除变量t
的用法,则必须按递减顺序给出输入(即,首先输入最高值)。如果使用t
,一切正常。我是编程新手,所以请帮助。
答案 0 :(得分:2)
这是Euclid计算GCD的算法。
function gcd(a, b){
while (b ≠ 0){
t := b;
b := a mod t;
a := t;
}
return a
}
该逻辑减少了a和b的值。 t是保持b值的虚拟变量,而b的下一个新值正在计算中。这个数字的幅度会更小。因此,最终我们将能够使用所需的结果终止算法。
答案 1 :(得分:1)
这是暂时的持有。
在此while
循环中a%b
必须设置为b,并且b的值必须设置为a。
为了避免损失b的值。
答案 2 :(得分:1)
假设您有2个值 - 旧的'a'和旧的'b'(没有't')。
'while'循环应该将这些值更新为新的'a'和新的'b'。 每次重新计算新的'a'都需要旧的'b',每次重新计算新的'b'都需要旧的'a'。 但是,如果先计算'b',它会覆盖旧值,而无法正确计算'a'。反过来相反 - 重新计算新的'a',你丢失旧的值,不能用它来计算'b'。因此,您需要一个临时变量来存储您在迭代中首先重新计算的变量('a'或'b')的旧值,然后使用此缓存值计算另一个变量:)'t'是此临时变量
答案 3 :(得分:1)
使用临时变量是一种常见的编程习惯。它用于保存变量值的副本,以便稍后在使用不同值更新变量后可以使用该值。也许最简单的用例是 swap ,也称为 exchange 。
/* swap the values held by a and b */
t = b; /* t holds the value in b */
b = a; /* b gets the value in a */
a = t; /* a gets the value in t */
while
循环的逻辑与上图没有根本区别。
实现的算法是 Euclid算法。它基于除法定理,它指出对于正a
和b
,存在q
,a = q*b + r
和{{1} }}。在C中,0 <= r < b
可以使用r
计算。
如果a % b
小于a
,则b
为a % b
。因此,该算法允许a
和a
在下一次迭代时切换位置。
如果你想要一个没有临时性的算法公式,你可以使用循环缓冲区。
b
答案 4 :(得分:1)
根据你的程序逻辑,
基本上,你的t
可以帮助你在每次迭代中存储第二个数字,这样在下一次迭代中,你的第一个数字(即'%'运算符左边的数字)就是前一个迭代的第二个数字数。 (我希望不会混淆你的废话)
这一切都是必要的,因为你在每次迭代中用'%'操作的结果覆盖第二个数字。