c语言求最小公倍数 用while循环求最大公约数
大家好,今天来为大家解答c语言求最小公倍数这个问题的一些问题点,包括用while循环求最大公约数也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
c语言求最小公倍数的方法
1、对于输入的两个正整数m和n每次输入的大小顺序可能不同,为了使程序具有一般性,首先对整数所m和n进行大小排序,规定变量m中存储大数、变量n中存储小数。
C语言
2、输入的两个数,大数m是小数n的倍数,那么大数m即为所求的最小公倍数;若大数m不能被小数n整除则需要寻找一个能同时被两数整除的自然数。
从大数m开始依次向后递增直到找到第一个能同时被两数整除的数为止,所以循环变量i的初值为寻找第一个能同时被两整数整除的自然数,并将其输出。需要注意的是,在找到第一个满足条件的i值后,循环没必要继续下去,所以用break来结束循环。
3、在上面的分析过程中没有提到循环变量的终止条件,因i的最大值不能确定,像这种终止条件不确定的情况如何来表示?方法有两种,第一,可以把判定条件表示成循环变量满足的基本条件,如本例终止条件可表示成i>0;第二,终止条件省略不写,利用循环体中的语句结束循环,如在找到第一个满足条件的自然数时利用break语句结束循环。
程序
c语言最小公倍数的求法
c语言最小公倍数的求法,如下所示:
两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。
与最小公倍数相对应的概念是最大公约数,a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。
1、穷举法:假设有两个整数num1和num2,这两个整数的最小公倍数一定大于等于它们的最大值,同时小于等于它们的积。按从小到大的顺序遍历整个范围内的所有整数,第一个公因数即为它们的最小公倍数。
2、定理法:使用定理求最小公倍数(两个整数的最小公倍数等于两数之积除以两个数的最大公因数),需要先求出两个整数的最大公因数,最大公因数这里采用辗转相除法。不考虑负数,求负数的最小公倍数本就是无意义的(相当于求两个正数的最大公倍数)
C语言求两个数的最大公约数和最小公倍数
你这个程序错误很多。
1,你想通过input来读入,但是呢在input那个函数中,a,b都是对main函数中的拷贝,对其进行修改,main函数中的a,b值是不变的。虽然都叫a,两个函数中的a其实在内存中是不同的变量,这点你要学习一下函数调用和变量的生命周期和作用域。
2,在input函数中你用scanf来读取两个值,中间用逗号隔开,那么你输入的时候也要用逗号隔开,这个设计不太合理。返回值没有,这个也不好,可以返回一个0.
3,yue和bei这两个函数中你的返回值分别是n,i,和第一问题一样,函数里的n和i和main函数里面的n和i不是同一个变量,你main里面的n,i都是没有被赋值的。
4,你设计的程序逻辑本身有问题,公约数从两个数中较小的数-1进行查找,若是较小的数本身就是较大的数的约数,就错了,比如,1,2,公约数应该是1,按你的算法计算得到的是0,这就错了。
正确的程序可以改成:
#include<stdio.h>
#include<stdlib.h>
int input(int& a,int& b)//此处要用引用或者指针,改为intput(int&a,int&b)
{
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
return 0;
}
int yue(int a,int b)
{
int m,n;
if(a>b)
m=b;//不要减一
else
m=a;//不要减一
for(n=m;n>0;n--)
{
if((a%n)==0&&(b%n)==0)
break;
}
return n;
}
int bei(int a,int b)
{
int i,j,h;
if(a>b)
j=a;
else
j=b;
for(i=j;i<=a*b;i++)
{
if((i%a)==0&&(i%b)==0)
h=i;
return h;
}
}
void main()
{
int input(int&,int&);
int yue(int,int);
int bei(int,int);
int a,b,n,i;
input(a,b);//此处要用引用或者指针,否则a,b并不能传递进去,修改形参表
n=yue(a,b);//改为n=yue(a,b);
i=bei(a,b);//改为i=bei(a,b);
printf("他们的公约数为%d\n",n);
printf("他们的公倍数为%d\n",i);
system("pause");
}
注意,引用是C++里面的,文件后缀得是CPP才行
关于c语言求最小公倍数的内容到此结束,希望对大家有所帮助。