//第一次尝试:
#include<stdio.h> void math_gys(int a, int b){ int t = 0; if (a < b){ t = a; } else{ t = b; } for (int i = t; i <= a && i <= b; i--){ if (a % i == 0 && b % i == 0){ printf("%d\n",i); break; }
}
}
int main(){ int x; int y; printf("请输入两个数\n"); scanf_s("%d %d", &x, &y); math_gys(x, y); return 0; }
//此代码我的做法不够好,这是一种暴力穷举法,虽然能解决问题,但是不够好,仍需进行优化
//第二次尝试:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>

#include<stdio.h>
int main() {
    int a = 0;
    int b = 0;
    int t = 0;
    int yushu = 1;
    if (a < b) {
        t = a; a = b; b = t;
    }
    printf("请输入两个数\n");
    scanf("%d %d", &a,&b);
    while(yushu!=0) {
        if (a % b != 0) {
            yushu = a % b;
            a = b;
            b = yushu;
        }
        else {
            printf("最大公约数为:%d\n", b);
            break;
        }
    }
    return 0;
}
//在网上查找之后,得到了另一种方法,辗转相除法,原理为:

//先用小的一个数除大的一个数,得第一个余数;
//再用第一个余数除小的一个数,得第二个余数;
//又用第二个余数除第一个余数,得第三个余数;
//这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。

//优化后的代码比较简洁的,直观地看起来让人很舒服,而且我感觉性能也会好一些。