㈠ 请大神帮我看一下这道c语言题目!!!求n个数的最小公倍数!!!在线等!!!
这是因为虽然最后的结果是32位整数,但是a*b的结果不一定是啊,有可能会超,所以lcm函数中的计算顺序需要调换一下,return a/gcd(a, b)*b;
㈡ 用C语言编写程序求两个数的最小公倍数,并输出
如图使用辗转相除法求最小公倍数:
(2)c语言求n个数的最小公倍数扩展阅读:
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
两个数的最大公约数是指能同时整除它们的最大正整数。
设两数为a、b(a2b),求a和b最大公约数(a,b)的步骤如下:
(1)用a除以b(a2b),得a÷b=q..n(0≤n)。
(2)若rn=0,则(a,b)=b;
(3)若r10,则再用b除以n,得b÷n=q..2(0sr2)
(4)若r2=0,则(a,b)=rn;若r20,则继续用r1除以r2,.…,如此下去,直到能整除为止。
其最后一个余数为0的除数即为(a,b)的最大公约数。
㈢ 求大神 c语言 求n个数的最小公倍数 我是哪里错了
#include<stdio.h>/*求n个数的最小公倍数*/
intmain()
{
inta[1000]={0,90,15,60,30};
intn,i,r,t;
while(~scanf("%d",&n))/*我的思路是求出前两个数的最小公倍数再与下一个数求*/
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
if(a[i]<a[i+1])//先要保证小数放到后面
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
t=a[i]*a[i+1];
while(r=a[i]%a[i+1])/*求两个数的最大公约数a[i+1]*/
{
a[i]=a[i+1];
a[i+1]=r;
}
a[i+1]=t/a[i+1];/*求出最小公倍数赋给a[i+1],再与下一个数求最大公倍数*/
}
printf("%d ",a[i]);//循环结束后,最后一个有效数据是a[i],即a[n]
}
return0;
}
㈣ C语言 n个数的最小公倍数!。。。求解
#include "stdio.h"
int yue(int x,int y){
int d=(x>y?1:-1);
while(1){
if(d==1){
x=x%y,d=-1;
if(x==0){
return y;
}
}
else{
y=y%x,d=1;
if(y==0){
return x;
}
}
}
}
int bei(int x,int y){
return x*y/yue(x,y);
}
int main(){
int n;
scanf("%d",&n);
int i;
int x,y=1;
for(i=0;i<n;i++){
scanf("%d",&x);
y=bei(y,x);
}
printf("%d",y);
return 0;
}
㈤ C语言求n个数的最小公倍数
你输入的n是1吧,当你输入1时,程序运行到for语句时,i的初值为1,由于条件判断语句1<1不满足,所以for语句根本就没有执行。你精心设计最大公约数函数不仅没有执行,甚至y也没有被赋值。程序直接转到printf语句。直接输出的就是x,也就是你说的输入的第一个数。由于程序使用了while语句,所以该程序不会自行结束。仍会等待你重新输入n进行下一轮计算。
解决方法:在for语句i初始值由1改为0,即i=0,或程序运行时,n值你直接输入2,但for循环只执行一次,然后依次输入x,y的值。ps:其实你的程序,运行没有错,算法设计的不是很好。我是把i改成0了。运行结果如图。
㈥ C语言程序设计:求n个数的最小公倍数。
原理:求最小公倍数,则先求最大公约数,最后所有数之积再除最大公约数即为最小公倍数
求两个数最大公约数原理:利用辗转相除法....自己网络一下,有详细
int
gcd(int
a,
int
b)
{
if
(a
==
0)
return
b;
if
(b
==
0)
return
a;
if
(a
<
b)
//交换两个数,使大数放在m上
{
int
tmp
=
a;
a
=
b;
b
=
tmp;
}
while
(b
!=
0)
{
int
tmp
=
a
%
b;
a
=
b;
b
=
tmp;
}
return
a;
}
利用函数gcd()返回数存在c,最后最小公倍数就为m
=
a
*
b
/
c
三个或者以上求最小公倍数时,先求前两个数最大公约数,然后用最大公约数跟下一个数求最大公约数,如此类推,最后把所有数相乘再除以最后得出的最大公约数,即为最小公倍数
我只给出思路而已,由于我没做过,如果你想要完成程序,就联系我吧
㈦ C语言 求n个数的最小公倍数 acm 2028
MIN函数里的
t=b*c;
这里如果b 和 c 很大,运算结果会溢出。
正确做法是先求出最大公约数 MAX,再计算最小公倍数 b / MAX * c;
㈧ C语言求一组数的最小公倍数
求OJ.
我是一楼,确实没有调试过。
不好意思。。。
#include <stdio.h>
int gcd(int x, int y)
{
if(x==0)
return y;
if(y==0 || x==y)
return x;
return gcd(x%y,y%x);
}
int main()
{
int n,i,t,s;
scanf("%d",&n);
scanf("%d",&t);
for(i=1;i<n;i++)
{
scanf("%d",&s);
t = t*s/gcd(t,s);
}
printf("%d\n",t);
}
㈨ c语言求最小公倍数
不知道你要什么样的,这个是我以前的一个作业,你自己改改就行了。
#include<stdio.h>
void
main()
{
int
a;
printf("请输入您要判断的一个整数,并按回车键\n");
scanf("%d",&a);
if(a%3==0&&a%5==0&&a%7==0)
printf("此数能被3,5,7整除\n");
else
if(a%3==0&&a%5==0)
printf("此数能被3,5整除\n");
else
if(a%3==0&&a%7==0)
printf("此数能被3,7整除\n");
else
if(a%5==0&&a%7==0)
printf("此数能被5,7整除\n");
else
if(a%3==0)
printf("此数能被3整除\n");
else
if(a%5==0)
printf("此数能被5整除\n");
else
if(a%7==0)
printf("此数能被7整除\n");
else
printf("此数不能被3,5,7任何一个数整除\n");
}
㈩ c语言求n个数的最大公约数和最小公倍数求个程序 刚入门不要太难的。。。
#include<stdio.h>
intmain()
{
inta[100],n,i,d;
printf("请输入您所要输入的数字个数 ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
while(a[i]%a[0]!=0)
{
d=a[i];
a[i]=a[0];
a[0]=d%a[0];
}
}
printf("您所输入的数字最大公约数为:%d",a[0]);
}