读书人

标题1049: 最大公约数

发布时间: 2013-03-06 16:20:31 作者: rapoo

题目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)最大公约数

读书人网 >编程

热点推荐