c语言如何求最小公倍数

c语言如何求最小公倍数,第1张

按照数学定义求。

最简单的 从较大数开始,一直累加出一个两个的共同渣仔倍数。

也可以先求最大如没汪公约数 然后用两个数的积除以最大公约数

int func(int a, int b)

{

    int r

    for( r=a  r++)

        if(r%a==0 &察槐& r%b==0) break

    return r

}

1、对于输入的两个正整数m和n每次输入的大小顺序可能不同,为了使程序具有一般性,首先对整数所m和n进行大小排序,规定变量m中存储大数、变量n中存储小数。

C语言

2、输入的两个数,大数m是小数n的倍数,那圆稿段么大数m即为所求的最小公倍数;若大橘誉数m不能被小数n整除则需要寻找一个能同时被两数整除的自然数。

从大数m开始依次向后递增直到找到第一个能同时被两数整除的数为止,所以循环变量i的初值为寻找第一个能同时被两整数整除的自然数,并将其输出敬段。需要注意的是,在找到第一个满足条件的i值后,循环没必要继续下去,所以用break来结束循环。

3、在上面的分析过程中没有提到循环变量的终止条件,因i的最大值不能确定,像这种终止条件不确定的情况如何来表示?方法有两种,第一,可以把判定条件表示成循环变量满足的基本条件,如本例终止条件可表示成i>0;第二,终止条件省略不写,利用循环体中的语句结束循环,如在找到第一个满足条件的自然数时利用break语句结束循环。

程序

/*

要求:必须使用数组做。

输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整羡晌拍数。

为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。题目确保结果在32位整数范围谨塌内。

输入样例:2 4 6

输出样例: 12

感恩节快乐哦!

*/

#include <stdio.h>

#include <stdlib.h>

/* 欧几里得算法求 数字 a b 的最大公约数 */

int gcd(int a,int b)

{

if(a<b)

{

return gcd(b,a)

}

else if(b==0)

{

return a

}

else

{

return gcd(b,a%b)

}

}

/* 数字 a b 的最小公约数 */

int lcm(int a,int b)

{

return a*b/gcd(a,b)

}

int main(int argc, char *argv[])

{

int n,i,r

int *data=NULL

while(scanf("%d",&n)!=EOF)

{

// 动态申请数字空间

data = (int*)malloc(n*sizeof(n))

for(i=0i<ni++)

{

scanf("%d",&data[i])

}

// 特殊处理只有一个数字的情况

if(n==1)

{

r = data[0]

}

else

{

// 先求前两个数字的最小公倍数兄羡

r = lcm(data[0],data[1])

// 求第 i 个数字和前面所有数字的最小公倍数

for(i=2i<ni++)

{

r = lcm(r,data[i])

}

}

printf("%d\n",r)

// 释放空间

free(data)

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12319554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存