我从维基百科的Euclid扩展算法中找到了这个伪代码,但我不知道如何从函数中返回2个值。
function extended_gcd(a, b)
if b = 0
return (1, 0)
else
(q, r) := divide (a, b)
(s, t) := extended_gcd(b, r)
return (t, s - q * t)
来源: http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
答案 0 :(得分:3)
你的问题被标记为C和C ++。
在C中,您实际上无法从函数返回两个值,但有几种方法可以实现相同的效果。
您可以返回struct
。例如,请参阅div
中声明的<stdlib.h>
函数,它返回类型div_t
的结果,包含quot
和rem
成员的结构。< / p>
或者你可以通过传递一个指针来间接地“返回”多个结果:
void func(int *result1, int *result2) {
*result1 = 10;
*result2 = 20;
}
...
int r1, r2;
func(&r1, &r2);
C ++支持这两种方法,还有其他一些方法。例如,C ++有引用类型; C ++标准库中也有类型,例如std::pair
和元组,可以用于此类事情。
但在开始实施之前,您应该决定使用哪种语言。
答案 1 :(得分:2)
模板类std::pair
可以用于此;即,
if (b == 0)
return std::pair<int, int>(1, 0);
答案 2 :(得分:1)
#include <stdio.h>
typedef struct _tuple {
int fst;
int snd;
} Tuple;
Tuple tuple(int a, int b){
Tuple ret = { a, b };
return ret;
}
Tuple extended_gcd(Tuple x){
if(x.snd == 0)
return tuple(1,0);
else {
Tuple qr = tuple(x.fst/x.snd, x.fst%x.snd);
Tuple st = extended_gcd(tuple(x.snd, qr.snd));
return tuple(st.snd, st.fst - qr.fst * st.snd);
}
}
int main() {
Tuple ans = extended_gcd(tuple(120,23));
printf("(%d,%d)\n", ans.fst, ans.snd);//(-9,47)
return 0;
}