c语言求最大公约数 c语言求两个数的最大公约数是多少
代码如下:
#include
int main()
{
int i,a,b,t;
scanf(%d%d,a,b);//输入数a,b
if(ab)//比较a,b大小,如果ab则交换,结果为ab p=”” /b
{
t=a;
a=b;
b=t;
}
for (i = a; i = 2; i–)//以较小的a为基数,每内次i减小1循环求最大公容约数
{
if (a % i == 0 b % i == 0)//如果两数均能整除某数则该数为最大公约数
{
printf(最大公约数是:%d\n,i);
break;//已得到最大公约数后跳出循环
}
}
if(i==1)//若循环到最后仍无最大公约数则i=1
printf(两数只能同时被1整除!\n);
return 0;
}
如何用C语言求两个数的最大公约数的三种算法
1、相减法
#includelt;stdio.hgt;
int main()
{
int a,b;
int c=0;//计数器
while(1)//循环判断的作用
{
printf(“输入两个数字求最大公约数:”);
scanf(“%d%d”,a,b);
while(a!=b)
{
if(agt;b)
a=a-b;
else
b=b-a;
c++;
}
printf(“最大公约数是:%d\n”,a);
printf(“%d\n”,c);
}
return 0;
}
运行效果:
2、辗转相除法:
#includelt;stdio.hgt;
int a,b,temp;
int Division(){
printf(“请输入两个数(a,b):\n”);
scanf(“%d,%d”,a,b);
if(alt;b){
temp=a;
a=b;
b=temp;
}
while(a%b!=0){
temp=a%b;
a=b;
b=temp;
}
printf(“最大公约数为:%d\n”,b);
return 0;
}
3、穷举法
#includelt;stdio.hgt;
int main()
{
int a,b,c;
int d=0;//计数器
while(1)
{
printf(“输入两个数字求最大公约数:”);
scanf(“%d%d”,a,b);
c=(agt;b)?b:a;//三目运算符
while(a%c!=0||b%c!=0)
{
c–;
d++;
}
printf(“最大公约数是:%d\n”,c);
printf(“%d\n”,d);
}
return 0;
}
c语言求两个数的最大公约数
#includestdio.h
void
main()
{
int
a,b,j=0,i,f=0,h=0;
int
u[2];
int
x[100];
int
y[100];
int
z[100];
for(i=0;i=1;i++)
//把输入的两个数放进数组u[i]
{
scanf(“%d”,u[i]);
}
for(a=1;a=u[0];a++)
//求输入的第一个数即u[0]的所有约数,把约数全部放进x[j]
{
for(b=1;b=u[0];b++)
{
if(a*b==u[0])
{
x[j]=a;
j++;
}
}
}
for(a=1;a=u[1];a++)//求输入的第二个数即u[1]的所有约数,把约数全部放进一y[f]
{
for(b=1;b=u[1];b++)
{
if(a*b==u[1])
{
y[f]=a;
f++;
}
}
}
for(a=0;aj;a++)//找出x[]与y[]中相同的元素,把相同元素放进z[h]
{
for(b=0;bf;b++)
{
if(x[a]==y[b])
{
z[h]=x[b];
h++;
}
}
}
printf(“%d
“,z[h-1]);
}
我给你稍做了修改。
你的小错误:
1.“void
mian()”是main()
2.你赋值经常赋反,必须是未知=已知。“b=x[j];e=y[f];”
3.在访问数组的时候,数组里面没有数你也访问了,这样会出错,也会浪费时间和资源。如“
for(j=0;j=100;j++)”这里面x[]后面有很多是没有赋值的。
4.“for(h=0;h=100;h++)/*在z[h]中各元素相比较,找出最大的元素即最大公约数*/”z[h]已经是由小到大的顺序了,只需要输出最后的那个。
5.尽量减少未知变量。
这个求最大公约数还有个简单的算法。你可以去百度查查。
希望我的回答对你有帮助。
c语言求最大公约数
最大公约数c语言编程的常用思路是:按照从大(两个整数中较小的数)到小(到最小的整数1)的顺序求出第一个能同时整除两个整数的自然数,即为所求。
两个数的最大公约数有可能是其中的小数,所以在按从大到小顺序找寻最大公约数时,循环变量i的初值从小数n开始依次递减,去寻找第一个能同时整除两整数的自然数,并将其输出。
需要注意的是,虽然判定条件是i0,但在找到第一个满足条件的i值后,循环没必要继续下去,如,25和15,最大公约数是5,对于后面的4、3、2、1没必要再去执行,但此时判定条件仍然成立,要结束循环只能借助break语句。
具体代码实现:
#includestdio.h
int main()
{
int m,n,temp,i;
printf(“Input mn:”);
scanf(“%d%d”,m,n);
if(mn)/*比较大小,使得m中存储大数,n中存储小数*/
{/*交换m和n的值*/
temp=m;
m=n;
n=temp;
}
for(i=n;i0;i–)/*按照从大到小的顺序寻找满足条件的自然数*/
if(m%i==0n%i==0)
{/*输出满足条件的自然数并结束循环*/
printf(“The GCD of%d and%d is:%d\n”,m,n,i);
break;
}
return 0;
}
c语言程序编写:计算两个数的最大公约数
#includestdio.h
#include conio.h
void main()
{
int m,n,k;
while (1)
{
printf(“输入m和n(mn):”);
scanf(“%d %d”,m,n);
if(mn)
printf(“输入错误,请重新输入\n”);
else break;
}
while (1)
{
k=m%n;
if(k==0)
break;
m=n;
n=k;
}
printf(“m和n的最大公约数是:%d”,n);
getch();
}
C语言:求两数的最大公约数
我的方法,很笨。请勿见笑
// 函数 GetCommonDivisor: 求两个数的最大公约数
int GetCommonDivisor( int x , int y )
{
// 取x,y的小者作为运算的起始点,逐渐减小,直到x,y都能整除为止
int Max = min( x,y );
while( Max = 1 )
{
if( ( x % Max == 0 ) ( y % Max == 0 ) )
// 找到最大公约数返回
return Max;
Max –;
}
return 1;
}