题目1049: 最大公约数
输入两个正整数,求其最大公约数。
输入
测试数据有多组,每组输入两个正整数。
输出
对于每组输入,请输出其最大公约数。
样例输入
49 14
样例输出
7
提示 [+]
*** 提示已隐藏,点击上方 [+] 可显示 ***
来源
2011年哈尔滨工业大学计算机研究生机试真题
/********************************* * 日期:2013-3-4* 作者:SJF0115 * 题号: 天勤OJ 题目1049: 最大公约数* 来源:http://acmclub.com/problem.php?id=1049* 结果:AC * 来源:2011年哈尔滨工业大学计算机研究生机试真题* 总结: **********************************/ #include<stdio.h> //判断奇偶性 int IsEvenOdd(int n){ if(n % 2 == 0){ return 1; } else{ return 0; } } int GCD(int a,int b) { //如果a < b if(a < b){ return GCD(b,a); } if(b == 0){ return a; } //若x,y都为偶数 if(IsEvenOdd(a) == 1 && IsEvenOdd(b) == 1){ return 2 * GCD(a>>1,b>>1); } //若x,y都为奇数 else if(IsEvenOdd(a) == 0 && IsEvenOdd(b) == 0){ return GCD(b,a-b); } //若x是偶数y是奇数 else if(IsEvenOdd(a) == 1 && IsEvenOdd(b) == 0){ return GCD(a>>1,b); } //若x是奇数y是偶数 else{ return GCD(a,b>>1); } } int main(){int a,b;while(scanf("%d %d",&a,&b) != EOF){printf("%d\n",GCD(a,b));}return 0;}
具体解析详见:编程之美读书笔记(5)最大公约数