题目描述
输入两个正整数,求其最大公约数。
输入
测试数据有多组,每组输入两个正整数。
输出
对于每组输入,请输出其最大公约数。
样例输入
49 14
样例输出
7
提示 [+]
*** 提示已隐藏,点击上方 [+] 可显示 ***
来源
/*********************************
* 日期:2013-3-4
* 作者:SJF0115
* 题号: 天勤OJ 题目1049: 最大公约数
* 来源:http://acmclub.com/problem.php?id=1049
* 结果:AC
* 来源:2011年哈尔滨工业大学计算机研究生机试真题
* 总结:
**********************************/
#include<stdio.h>
int GCD(int a,int b)
{
//如果a < b
if(a < b){
return GCD(b,a);
}
if(b == 0){
return a;
}
else{
return GCD(a - b,b);
}
}
int main(){
int a,b;
while(scanf("%d %d",&a,&b) != EOF){
printf("%d\n",GCD(a,b));
}
return 0;
}
/*********************************
* 日期:2013-3-4
* 作者:SJF0115
* 题号: 天勤OJ 题目1049: 最大公约数
* 来源:http://acmclub.com/problem.php?id=1049
* 结果:AC
* 来源:2011年哈尔滨工业大学计算机研究生机试真题
* 总结:
**********************************/
#include<stdio.h>
//递归形式
int GCD(int a,int b)
{
if(b == 0){
return a;
}
else{
//a,b和b,a%b有相同的最大公约数
return GCD(b,a%b);
}
}
int main(){
int a,b;
while(scanf("%d %d",&a,&b) != EOF){
printf("%d\n",GCD(a,b));
}
return 0;
}
/*********************************
* 日期: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)最大公约数