1、首先介绍一下求最小公倍数的经典方法:
辗转相除法
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
a * b除以最大公约数 等于最小公倍数
2、因此原问题也化为最小公倍数和最大公约数一起求了。程序的算法如下:
#include<stdio.h>
int lowest_common_multiple(int m,int n)
int main()
{
int m,n,c
printf("请输入m的值:\n")
scanf("%d",&m)
printf("请输入n的值:\n")
scanf("%d",&n)
c=lowest_common_multiple( m, n)
printf("请输出最小公倍数c的值:\n")
printf("%d\n",c)
return 0
}
int lowest_common_multiple(int m,int n)
{
int remainder,m1,n1
m1=m
n1=n
while (n != 0) {
remainder = m % n
m = n
n = remainder
}
//printf("输出最大公约数m: %d\n", m)//此时的m为最大公约数
return m1*n1/m
}
3、程序的输出如下:
4、此题注释的哪一个是输出最大公约数的。
#include&ltstdio.h&gt
int main()
{
int m,n,temp,i
printf("Input m&n:")
scanf("%d%d",&m,&n)
if(m&ltn)/*比较大小,使得m中存储大数,n中存储小数*/
{
temp=m
m=n
n=temp
}
for(i=mi&gt0i++)/*从大数开始寻找满足条件的自然数*/
if(i%m==0&&i%n==0)
{/*输出满足条件的自然数并结束循环*/
printf("The LCW of%d and%d is:%d\n",m,n,i)
break
}
return 0
}
算法设计
对于输入的两个正整数m和n每次输入的大小顺序可能不同,为了使程序具有一般性,首先对整数所m和n进行大小排序,规定变量m中存储大数、变量n中存储小数。
输入的两个数,大数m是小数n的倍数,那么大数m即为所求的最小公倍数;若大数m不能被小数n整除则需要寻找一个能同时被两数整除的自然数。
从大数m开始依次向后递增直到找到第一个能同时被两数整除的数为止,所以循环变量i的初值为寻找第一个能同时被两整数整除的自然数,并将其输出。需要注意的是,在找到第一个满足条件的i值后,循环没必要继续下去,所以用break来结束循环。
扩展资料:include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include&lt文件名&gt
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include&ltmath.h&gt//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:
#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏
你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。
【例1】在#include命令中的宏
#ifdef _DEBUG_
#define MY_HEADER"myProject_dbg.h"
#else
#define MY_HEADER"myProject.h"
#endif
#include MY_HEADER
当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h的内容;如果还没定义,则插入myProject.h的内容。
#include <stdio.h>#include <stdlib.h>
//核心是辗转相除法求最大公约数,最大公约数*最小公倍数 = 数1*数2
void main()
{
int num1,num2,temp
int a,b
printf("input two numbers:\n")
scanf("%d %d",&num1,&num2)
if(num1>num2){
temp =num1
num1 = num2
num2 = temp
}
a = num1
b =num2
while(b!= 0){//辗转相除法求最大公约数
temp = a%b
a =b
b =temp
}
printf("最大公约数是%d\n",a)
printf("最小公倍数是%d\n",num1*num2/a)//
}