1、欧几里德算法(迭代)
#include <stdio.h>
int gcd_iterative(int a, int b) {
int temp;
while (b != 0) {
temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1, num2;
printf("输入两个整数:");
scanf("%d %d", &num1, &num2);
int result = gcd_iterative(num1, num2);
printf("使用迭代欧几里德算法计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
return 0;
}
2、欧几里德算法(递归)
#include <stdio.h>
int gcd_recursive(int a, int b) {
if (b == 0)
return a;
return gcd_recursive(b, a % b);
}
int main() {
int num1, num2;
printf("输入两个整数:");
scanf("%d %d", &num1, &num2);
int result = gcd_recursive(num1, num2);
printf("使用递归欧几里德算法计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
return 0;
}
3、在函数中使用指针
#include <stdio.h>
void gcd_pointers(int a, int b, int *result) {
int temp;
while (b != 0) {
temp = b;
b = a % b;
a = temp;
}
*result = a;
}
int main() {
int num1, num2, result;
printf("输入两个整数:");
scanf("%d %d", &num1, &num2);
gcd_pointers(num1, num2, &result);
printf("在函数中使用指针计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
return 0;
}
4、使用函数指针
#include <stdio.h>
int gcd_iterative(int a, int b) {
int temp;
while (b != 0) {
temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1, num2, result;
int (*gcd_ptr)(int, int) = &gcd_iterative;
printf("输入两个整数:");
scanf("%d %d", &num1, &num2);
result = gcd_ptr(num1, num2);
printf("使用函数指针计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
return 0;
}
5、使用宏函数
#include <stdio.h>
#define GCD_MACRO(a, b) ({ \
int temp; \
while (b != 0) { \
temp = b; \
b = a % b; \
a = temp; \
} \
a; \
})
int main() {
int num1, num2;
printf("输入两个整数:");
scanf("%d %d", &num1, &num2);
int result = GCD_MACRO(num1, num2);
printf("使用宏函数计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
return 0;
}