您的位置:

c语言编写最大公约数最小公倍数,c语言最大公倍数和最小公约数

本文目录一览:

c语言函数调用求最大公约数和最小公倍数

#includelt;stdio.hgt;

int a;

int _Y(int x,int y);

int main()

{

int a,b,c,d;

printf(“请输入数字:”);

scanf("%d,%d",c,d);//此处注意在输出的时候数字之间要打都好,不然输出结果错误

b=_Y(c,d);

a=c*d/b;

printf(“最大公约数为:%d\n”,b);

printf(“最小公倍数为:%d\n”,a);

return 0;

}

int _Y(int x,int y)

{

int e;

if(xlt;y)

{

e=x;

x=y;

y=e;

}

while((e=x%y)!=0)

{

x=y;

y=e;

}

return(y);

}

扩展资料:

while循环开始后,先判断条件是否满足,如果满足就执行循环体内的语句,执行完毕后再回来判断条件是否满足,如此无限重复;直到条件不满足时,执行while循环后边的语句。简单来讲就是说while循环是先判断后循环, 判断如果满足条件进入循环 本次循环后再次判断 。

举个例子:

do-while循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。 简单来讲就是说while循环是先循环后判断 。

举个例子:

总结:while循环是先判断后循环 ,而do–while循环是先循环后判断。

参考资料:

百度百科——while(循环语句及英文单词)

c语言编程,求两个数的最大公约数和最小公倍数

这样写:

#include

void

main()

{

int

m,n,i,r,temp;

printf("请输入第一个数的值:

");

scanf("%d",m);

printf("请输入第二个数的值:

");

scanf("%d",n);

if(nm)

{

temp=m;

m=n;

n=temp;

}

i=n;

while(i%m!=0)

{

i=i+n;

}

printf("最小公倍数是:%d

\n",i);

r=m%n;

while(r!=0)

{

m=n;

n=r;

r=m%n;

}

printf("最大公约数是:%d

\n",n);

}

图:

c语言求最大公约数和最小公倍数

c语言求最大公约数和最小公倍数,回答如下:

在做C语言相关练习的时候,会遇见比较经典的一道题型,就是求最大公约数或者最小公倍数。那么先普及一下什么是最大公约数和最大公倍数:

最大公约数:指能够整除多个整数的最大正整数。例如8和12的最大公约数为4。

最小公倍数:两个或多个整数最小的公共倍数。例如6和24的最小公倍数为24。

1.暴力求解

以求最大公约数为例,若求 a b 的最大公约数,所求的数最大不会超过两个数中较小的数。那可以从这个较小的数开始被a b同时试除,如果试除的余数为0,那么该数即为所求。如果不满足余数同时为零的条件,那么该数减一,接着试除,直到满足余数同时为零的条件为止。

2.辗转相除法

辗转相除法是用来求最大公约数的,同时最小公倍数满足这样一条数学性质:两数之积除以最大公约数即为最小公倍数.所以用辗转相除法是可以间接求最小公倍数的。

辗转相除法的大概思路:用两数相除,如果余数为零即为所求,如果余数不为零,上一轮相除所得的余数为除数,同时上一轮的除数现在成为被除数,直到余数为零不再相除,此时的除数即为所求。

c语言如何求最小公倍数和最大公约数

解题步骤:

1、求最大公约数

对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。

2、求最小公倍数

对两个正整数a,b,如果若干个a之和或b之和能被b所整除或能被a所整除,则该和数即为所求的最小公倍数。

//穷举法求两数的最大公约数

int divisor(int a,int b)

{

int temp;//定义义整型变量

temp=(agt;b)?b:a;//采种条件运算表达式求出两个数中的最小值

while(tempgt;0){

if(a%temp==0b%temp==0)//只要找到一个数能同时被a,b所整除,则中止循环

break;

temp--;//如不满足if条件则变量自减,直到能被a,b所整除

}

return temp;//返回满足条件的数到主调函数处

}

//穷举法求两数的最小公倍数

int multiple(int a,int b)

{

int p,q,temp;

p=(agt;b)?a:b;//求两个数中的最大值

q=(agt;b)?b:a;//求两个数中的最小值

temp=p;//最大值赋给p为变量自增作准备

while(1){//利用循环语句来求满足条件的数值

if(p%q==0)

break;//只要找到变量的和数能被a或b所整除,则中止循环

p+=temp;//如果条件不满足则变量自身相加

}

return p;

}

扩展资料:

用穷举法解题时,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:

(1)顺序列举是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。

(2)排列列举有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。

(3)组合列举当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。

例子如下:在公元五世纪我国数学家张丘建在其《算经》一书中提出了“百鸡问题”:

“鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?”这个数学问题的数学方程可列出如下:

Cock+Hen+Chick=100

Cock*5+Hen*3+Chick/3=100

显然这是个不定方程,适用于穷举法求解。依次取Cock值域中的一个值,然后求其他两个数,满足条件就是解。

该问题的C语言程序算法如下:

int Cock,Hen,Chick;/*定义公鸡,母鸡,鸡雏三个变量*/

Cock=0;

while(Cocklt;=19)/*公鸡最多不可能大于19*/

{Hen=0;

whlie(Henlt;=33)/*母鸡最多不可能大于33*/

{Chick=100-Cock-Hen;

if(Cock*15+Hen*9+Chick==300)/*为了方便,将数量放大三倍比较*/

printf("\n公鸡=%d\n母鸡=%d\n雏鸡=%d",Cock,Hen,Chick);

Hen=Hen+1;

}

Cock=Cock+1;

}

参考资料:

百度百科——穷举法