更相减损法是九章算术中用于求取最大公约数的古老算法,适用于一切求最大公约数的场合
简单过程如下:
1.先用用较大的数去减较小小数(a>b,c=a-b);
2.用第一步的结果继续去减较小的数(d=c-b);
3.如此反复,直到相减得零.
废话不多说,上代码
#includeint main(void) { int a, b; int gcd(int a, int b); //求取最大公约数 printf("请输入两个正数:n"); scanf("%d %d", &a, &b); if (a > 0 && b > 0) { maxcd(a, b); printf("最大公约数为%dn", gcd(a, b)); } return 0; } int gcd(int a, int b) { int tmp = 0; if (a == b) { return a; // a=b下,最大公约数为其自身 } else { if (a > b) { tmp = a - b; gcd(tmp, b); } else { tmp = b - a; //使用递归,调用函数本身 gcd(tmp, a); } } return a; }
gcd函数还可以通过循环实现,但递归能更简单的实现功能
仍有不足,期待建议与指正



