码迷,mamicode.com
首页 > 编程语言 > 详细

【C语言】最大公约数(更相减损法)和(辗转相除法)

时间:2015-03-10 23:11:40      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

#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;
}

【C语言】最大公约数(更相减损法)和(辗转相除法)

标签:

原文地址:http://blog.csdn.net/a781558066/article/details/44183267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!