我为课程编写了一个程序,需要递归地评估扩展欧几里得算法的a和b,返回最大公约数G,以及as + bt = gcd(a,b)中的s和t。我相当确定我已经正确编写了函数,但是我在传递和从函数返回值时遇到了问题。我有一段时间没有编码了,最近只编写了伪代码,所以有点生疏。
例如,我已经编写了当b = 0时,返回(a,1,0),但是当我将b输入为0时,我会返回(0,0,0),并且无法弄清楚发生了什么。任何帮助或指导都将不胜感激。
例如,我已经编写了当b = 0时,返回(a,1,0),但是当我将b输入为0时,我会返回(0,0,0),并且无法弄清楚发生了什么。任何帮助或指导都将不胜感激。
#include <iostream>
using namespace std;
int ExtGCD (int a, int b)
{
int g, s, t, g1, s1, t1;
if (b == 0) {
return (a, 1, 0);
}
(g1, s1, t1) = ExtGCD(b, a%b);
g = g1;
s = s1;
t = s1 - ((a/b)*t1);
return (g, s, t);
}
int main(int argc, char* argv[])
{
int a,b, g2, s2, t2, temp;
cout << "Please input a: ";
cin >> a;
cout << "Please input b: ";
cin >> b;
if (b > a) {
temp = a; a = b; b = temp;
}
(g2, s2, t2) = ExtGCD (a, b);
cout << "G = "<< g2 << ", S = " << s2 << ", T = " << t2;
return 0;
}
a
和b
。如果你输入 "0",那实际上是 ASCII 码 48。找出当你输入它们时a
和b
是什么。 - Mike 'Pomax' Kamermans