求两个数m和n的最大公约数。
方法一:正常思维 #include<stdio.h> #include<stdlib.h>int main() {
int m,n,r,t; scanf("%d%d",&m,&n); while(1) { if(m < n) //保证m为较大值 { t = m; m = n; n = t; } r = m - m / n * n; if(r == 0) //余数为0,n就是最大公约数 { printf("%d\n",n); break; } m = n; n = r; } system("pause"); return 0; }方法二:通过函数返回m和n的大小
#include<stdio.h>
#include<stdlib.h> int min(int m,int n); int max(int m,int n);int min(int m,int n)
{ if(m < n) return m; else return n; }int max(int m,int n)
{ if(m > n) return m; else return n; } int main() { int m,n,r,t; scanf("%d%d",&m,&n); while(1) { t = m; m = max(t,n); n = min(t,n); r = m - m / n * n; if(r == 0) { printf("%d\n",n); break; } m = n; n = r; system("pause"); return 0; }方法三:直接用m和n两个变量来求出
#include<stdio.h>
#include<stdlib.h>int main() {
int m,n; scanf("%d%d",&m,&n); while(1) { m = m - m / n * n; if(m == 0) { printf("%d\n",n); break; } n = n - n / m * m; if(n == 0) { printf("%d\n",m); break; } } system("pause"); return 0; }算法原理:m = qn + r 中{m,n}和{q,r}的最大公约数是一样的