有三种写法:
1.
#include <stdio.h>
int main()
{
int a,b;
int min;
scanf("%d %d", &a, &b);
if ( a<b ) {
min = a;
} else {
min = b;
}
int ret = 0;
int i;
for ( i = 1; i < min; i++ ) {
if ( a%i == 0 ) {
if ( b%i == 0 ) {
ret = i;
}
}
}
printf("%d和%d的最大公约数是%d.\n", a, b, ret);
return 0;
}
min这个值设成为两个数中的最小的那个。这样,for循环只需要循环到min就够了,里面同时两个if来判断两个数是否都能整除。而且ret在循环的过程中会保持当前最大值,这样可以保证输出的是最大的公约数。
2.
#include <stdio.h>
int main()
{
int a,b;
int t;
scanf("%d %d", &a, &b);
int origa = a;
int origb = b;
while ( b != 0 ) {
t = a%b;
a = b;
b = t;
}
printf("%d和%d的最大公约数是%d.\n", origa, origb, a);
return 0;
}
辗转相除法:
结束条件:当两个值中一个值变为0,则另外一个值就是所谓的最大公约数。
设置一个数为参考,只要这个数不为0,就一直循环。循环内部,用t记录a取余b的值,然后将参考的数赋给b,a接收b的值。
3.
#include<stdio.h>
int main()
{
int a,b;
int t=1;
scanf("%d %d",&a,&b);
while(a!=b)
{
if(a>b)
{
a-=b;
}
else
{
b-=a;
}
}
printf("%d",a);
}
更相减损法:两个数每次用大的减去小的,直到减数和被减数相等时结束。这个减数或被减数就是最大公约数