C语言——求最大公约数
关于怎么求最大公约数,我总结了两种方法!
一种是取余求最大公约数
另一种是相减求最大公约数
下面第一种先介绍一下取余法,代码如下:
这个方法的思路就是对两个数字进行循环求余,只要当余数不为0时就一直进行循环,余数为0时推出循环,输出除数的值,此时除数的值就是最大公约数,下面我会用一个例子来说明一下;
比如有两个数字24和34
m % n = yu
24 % 34 = 24
34 % 24 = 10
24 % 10 = 4
10 % 4 = 2
4 % 2 = 0
注意:写代码时要将yu放在“=”左边,因为“=”左边只能为左值。
注意:我这个代码是在Linux环境下写的,要在C-Free中运行会有乱码,只要将中文换掉即可。
#include <stdio.h>
int main(){
int m = 0,n = 0;
scanf("%d %d",&m,&n);
if(m==0||n==0){
printf("没有最大公约数!\n");
return 0;
}
while(m%n!=0){
int yu = m%n;
m = n;
n = yu;
}
printf("最大公约数是:%d\n",n);
return 0;
}
另一种方法为相减法,代码如下:
这个方法的思路就是对两个数字进行循环相减,只要两个数相减不为0时则一直循环,相减为0时则推出循环,输出被减数的值,此时被减数或者减数都为最大公约数,例子如下:
还是24和34
m - n = res
34 - 24 = 10
24 - 10 = 14
14 - 10 = 4
10 - 4 = 6
6 - 4 = 2
4 - 2 = 2
2 - 2 =0
#include <stdio.h>
int main(){
int m=0,n=0;
scanf("%d %d",&m,&n);
if(m==0 || n==0){
printf("没有最大公约数!\n");
}else{
int big = m>n?m:n;
int small = m>n?n:m;
while(big-small!=0){
int res = big-small;
big = res>small?res:small;
small = res>small?small:res;
}
printf("最大公约数为:%d\n",big);
}
return 0;
}