文章目录
0x00 前言
0x01 题目描述
0x02 问题分析
0x03 代码设计
0x04 完整代码
0x05 运行效果
0x06 总结
0x00 前言
C 语言网不仅提供 C 语言,还包括 C++ 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及软件下载、题解博客,源码分享等优质资源,提倡边学边练边分享,同时提供对口的IT工作,是国内领先实用的综合性编程学习网站!
0x01 题目描述
题目内容:
输入两个正整数 m 和 n ,求其最大公约数和最小公倍数。
输入格式:
两个整数 |
输出格式:
最大公约数,最小公倍数 |
样例输入:
5 7 |
样例输出:
1 35 |
0x02 问题分析
题目中给出的样例输入是 5 和 7 ,因为辗转相除法需要将大的数除以小的数。所以要在代码编写时将用户输入的两个数进行判断,如果是如样例输入一样的情况,那么将数据进行转换。题目要求最大公约数和最小公倍数,可以使用欧几里得的辗转相除法求最大公约数,最小公倍数亦可得出,以下是关于欧几里得求最大公约数和最小公倍数的示例。
关于辗转相除法的示例:
关于计算最小公倍数的示例:
0x03 代码设计
int gcd(int a, int b)
{
int x, c;
if(a < b)
{
x = a;
a = b;
b = x;
}
while(b != 0)
{
c = a % b;
a = b;
b = c;
}
return a;
}
代码解析:创建一个函数 gcd ,其内部参数整型 a 和 b 用于计算用户输入的 a 和 b 的最大公约数。定义一个变量 x 用来变换 a 和 b 的值,如果 a 小于 b ,那么执行代码,将 a 和 b 的数值进行互换。使用 while 函数,当 b != 0时,则执行循环。例如 7 % 5 = 2,a = 5, b = 2;5 % 2 = 1,a = 2, b = 1;2 % 1 = 0,a = 1, b = 0。此时 b = 0 ,代码将结束循环,并将结果 a 返回。
int main()
{
int a, b, i;
scanf("%d %d", &a, &b);
i = gcd(a, b);
printf("%d ", i);
printf("%d", a * b / i);
return 0;
}
代码解析:在主函数中首先定义两个变量 a 和 b ,用于存储用户输入的两个数。调用函数 gcd 并将用户输入的数作为参数传入到函数中去,函数运行结束后的值存储在变量 i 中。最后使用 printf 函数分别将最大公约数和最小公倍数输出出来。
0x04 完整代码
#include<stdio.h>
int gcd(int a, int b)
{
int x, c;
if(a < b)
{
x = a;
a = b;
b = x;
}
while(b != 0)
{
c = a % b;
a = b;
b = c;
}
return a;
}
int main()
{
int a, b, i;
scanf("%d %d", &a, &b);
i = gcd(a, b);
printf("%d ", i);
printf("%d", a * b / i);
return 0;
}
0x05 运行效果
5 7
1 35
--------------------------------
Process exited after 1.639 seconds with return value 0
请按任意键继续. . .
0x06 总结
文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。