1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言例题:输入两个正整数m和n 求其最大公约数和最小公倍数。

C语言例题:输入两个正整数m和n 求其最大公约数和最小公倍数。

时间:2023-06-10 04:27:14

相关推荐

C语言例题:输入两个正整数m和n 求其最大公约数和最小公倍数。

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

方法一:短除法

理论参考:百度知道

#include <stdio.h>int main() {int m, n; // 两个输入的数int x = 1, y; // x 是最大公约数,y是最小公倍数int i = 2; // 累乘因子,从 2 开始printf("请输入 m 和 n:\n");scanf("%d%d", &m, &n);// 将输入的两个数调整位置,m 是较大的那个数,n 是较小的那个数if (m < n) {m = m + n;n = m - n; // m(m + n) - n(n) = mm = m - n; // m(m + n) - n(m) = n}if (m % n == 0) {// 两个数成倍数printf("最大公约数:%d\n最小公倍数:%d\n", n, m);} else {// 不成倍数// 计算最大公约数while (i < n) {// 当累乘因子小于较小值时,继续计算if (m % i == 0 && n % i == 0) {// 同时为两个数的乘法因子m /= i;n /= i;x *= i;} else {i++;}}// 计算最小公倍数y = x * m * n;printf("最大公约数:%d\n最小公倍数:%d\n", x, y);}}

方法二:遍历法

# include<stdio.h>int main(){int m, n; // 两个输入数int x, y; // x 为最大公约数,y 为最小公倍数int min, max; // max 为两个输入数中,较大的一个,min 为较小的一个int i; // 用于 for 循环遍历printf("请输入 m 和 n:\n");scanf("%d %d", &m, &n);min = m > n ? n : m;max = m > n ? m : n;x = 1; // 公约数初始化设为 1if (max % min == 0) {// 两个数是倍数关系printf("最大公约数:%d\n最小公倍数:%d\n", min, max);} else {// 不成倍数// 寻找最大公约数for (i = 1; i <= min; i++) {// 从 1 找到 minif (max % i == 0 && min % i == 0) x = i;}// 寻找最小公倍数while (max % m != 0 || max % n != 0) {// 当有一方不能被整除时,继续往后找max++;}y = max;printf("最大公约数为:%d\n最小公倍数为:%d", x, y);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。