我的思路是這樣的:比如12和16這兩個數。先理解一下概念,什么叫最大公約數。就是12有很多個因數,16也有很多個因數,這兩堆因數中有一些重合的因數,在這些重合的因數中找到那個最大的。那么最大公約數一定是兩個數的公約數,且最大公約數一定再12的因數中尋找的。OK,我們先對12求除所有的因數,那么需要一個循環,在這個循環中每次拿到12的一個因數,看它是不是16的一個因數,如果是,那么說明這個因數就是12和16的一個公因數,暫時把最大公約數設置為這個公因數,然后進行下次循環,如果能找到12和16的又一個公因數,那么就把這個公因數設置為最大公約數,直到循環結束,直接輸出公因數的值就是最大公約數。
int main() { /* 題目:求兩個數的最大公約數 */ int a = 0; int b = 0; int i = 1; int great_common_divisor = 1; scanf_s("%d %d",&a,&b); if (a%b == 0 || b % a == 0)//如果能直接整除,那么較小的那一個就是最大公約數 { if (a > b) { printf("greatest common divisor is %d",b); } else { printf("greatest common divisor is %d",a); } } else { while(i<=a) { if (a%i == 0)//等於0說明找到了a的一個因數i { if (b%i == 0)//等於0說明找到了a和b的一個公因數 { //把這個公因數暫時設置為最大公約數 great_common_divisor = i; } } i++; } //循環結束之后,最后一次修改的那個公因數就是最大公約數 printf("greatest common divisor is %d",great_common_divisor); } }