#include<stdio.h> #include <math.h> /* 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4 */ //更相减损法 int fuc(int m,int n) { int i=0,temp,x; while(m%2==0 && n%2==0) //判断m和n能被多少个2整除 { m/=2; n/=2; i+=1; } if(m<n) //m保存大的值 { temp=m; m=n; n=temp; } while(x) { x=m-n; m=(n>x)?n:x; n=(n<x)?n:x; if(n==(m-n)) break; } if(i==0) return n; else return (int )pow(2,i)*n; } //辗转相除法 int fuc2(int m,int n ) { int temp; if(m<n) { temp=m; m=n; n=temp; } while(n!=0) //相除 { temp=m%n; m=n; n=temp; } return m; } int main() { int m,n; scanf("%d%d",&m,&n); printf("fuc:%d\n",fuc(m,n)); printf("fuc2:%d\n",fuc2(m,n)); return 0; }
原文:http://blog.csdn.net/a781558066/article/details/44183267