//第一次尝试:
#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,那么原来的两个数是互质数)。
//优化后的代码比较简洁的,直观地看起来让人很舒服,而且我感觉性能也会好一些。
浙公网安备 33010602011771号