1029 求最大公约数
时间限制:1000MS 代码长度限制:10KB
提交次数:6489 通过次数:3903
题型: 编程题 语言: G++;GCC
Description
由键盘输入两个正整数m、n(m、n<1000000),计算它们的最大公约数。
输入样例
16,24
输出样例
8
方法一:辗转相除法
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c,result;
scanf("%d,%d",&a,&b);
while(a>b){
if(a%b==0){
result=b;
break;
}
else {
c=a%b;
a=b;
b=c;
}
}
while(a<b){
if(b%a==0){
result=a;
break;
}
else {
c=b%a;
b=a;
a=c;
}
}
printf("%d",result);
}
方法二:辗转相减法
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,result;
scanf("%d,%d",&a,&b);
while (a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
result=a;
printf("%d",result);
}
方法三:辗转相除法简便方法
#include<stdio.h>
int main()
{ long r,m,n;
scanf("%ld,%ld",&m,&n);
while((r=n%m)!=0)
{ n=m;
m=r;
}
printf("%ld\n",m);
}
因为%除余计算是不管小的%大的还是大的%小的都可以得到一个余数,所以可以辗转相除,当余数不等于0时,不断让被除数等于除数,除数等于余数,当余数为0时,得到的除数就是最大公约数。