首页 > 编程语言 >C++求最小公倍数与最大公因数

C++求最小公倍数与最大公因数

时间:2024-11-12 09:44:12浏览次数:3  
标签:return cout temp 公倍数 C++ int 最大公约数 公因数

#大一小卡了咪的作业4

题目:

        设计两个函数MaxCommonDevisor(n,m) 和MinCommonMultiple(n,m),分别求两个数的最大公约数和最小公倍数。主函数调用上述两个函数,实现功能。

       乍一看这个题其实比较麻烦,因为要同时满足两个数的要求(同时整除/分别整除),但实际上可以通过以下方法来解决:

        可用穷举法求最大公约数(从大到小找到的第1个公约数)和最小公倍数(从小到大找到的第1个公倍数)。

那么代码就可以写出来了:

#include<iostream>
using namespace std;
int MaxCommonDevisor(int n, int m)
{
	if (m < n)
	{
		int temp = m;
		m = n;
		n = temp;
	}
	for (int i = m; i >= 1; i--) {
		if (m % i == 0 && n % i == 0) {
			return i;
			break;
		}
	}
}
int MinCommonMultiple(int n, int m)
{
	if (m < n)
	{
		int temp = m;
		m = n;
		n = temp;
	}
	for (int i = n; i <= m * n; i++) {
		if (m == 0 || n == 0) { cout << "错误" << endl; }
		if (i % m == 0 && i % n == 0) {
			return i;
			break;
		}
	}
}
int main() {
	int m = 0, n = 0;
	
	cout << "请输入m和n的值" << endl;
	cin >> m >> n;
	int a = MinCommonMultiple(m,n);
	int b = MaxCommonDevisor(m,n);
	cout << "最小公倍数为:" << a << endl;
	cout << "最大公因数为:" << b << endl;
	system("pause");
	return 0;

}





运行结果如图所示

 补充:有能力的同学可以尝试更高阶的算法--欧几里得算法:

#include <iostream>
using namespace std;

int mcd(int m, int n)
{
    // 使用欧几里得算法求最大公约数
    while (n != 0)
    {
        int temp = n;
        n = m % n;
        m = temp;
    }
    return m;
}

int mcm(int m, int n)
{
    // 最小公倍数通过最大公约数来计算
    int gcd = mcd(m, n);
    return (m / gcd) * n; // 防止溢出,先除后乘
}

int main()
{
    int a, b, c, d;
    cout << "请输入两个整数" << endl;
    cin >> a >> b;

    c = mcd(a, b);
    d = mcm(a, b);

    cout << "最大公约数为:" << c << endl;
    cout << "最小公倍数为:" << d << endl;

    return 0;
}

运行结果同样正确,希望可以对大家有帮助!!

标签:return,cout,temp,公倍数,C++,int,最大公约数,公因数
From: https://blog.csdn.net/weixin_74325745/article/details/143660813

相关文章

  • C++-模块
    C++20引入了模块(Modules)的概念,这是一项重要的语言特性,旨在改进C++的编译速度和构建过程。模块提供了一种新的组织代码的方式,可以替代传统的头文件包含和预处理器。使用模块可以带来以下几个好处:更快的编译速度:传统的头文件包含方式在编译过程中需要进行大量的文件打开和文本处......
  • 【C++】模板(一):函数模板
    大家好,我是苏貝,本篇博客带大家了解C++的函数模板,如果你觉得我写的还不错的话,可以给我一个赞......
  • C++----继承
    目录一.继承的概念及定义1.继承的概念2.继承的定义二.基类和派生类对象赋值转化三.继承中的作用域四.派生类的默认成员函数五.继承和友元六.继承和静态成员七.复杂的菱形继承及菱形虚拟继承八.继承的总结和反思一.继承的概念及定义1.继承的概念继承(inheritanc......
  • C++入门基础(四)
    目录引用的应用做参数做返回值野引用扩展传值、传引用效率比较引用和指针的区别C++对比C语言实现顺序表引用的应用做参数 #include<iostream> usingnamespacestd; voidSwap(int&a,int&b) { inttemp=a; a=b; b=temp; } intmain() { in......
  • C++结构体中的资源释放
    一般情况下,结构体不需要手动释放。如果结构体只包含基本类型(如int、float等)或没有指针成员,其内存由栈或堆自动管理,不需要手动释放。然而,如果结构体包含动态分配的资源(例如指针、文件句柄等),则需要在结构体的生命周期结束时手动释放这些资源。通常可以通过以下方式来管理:使用......
  • C++数据结构实验题目解析
    目录题目:考点分析:难点1:就地逆置步骤:代码实现:核心代码详细解释:难点2:①非递减链表,②删除相同元素代码详解①:代码详解②:完整代码:大家好,今天我就来给大家分析一下我上期分享的题目的详细解析,编程的能力都是逐步提升的,但是思维的锻炼可以提前进行,这样有助于我们以后自......
  • C++中需要资源释放的变量
    资源或变量需要释放的情况通常是在其内存或其他系统资源是动态分配的或非自动管理的,尤其是在手动分配资源时(如new、malloc、文件句柄、网络连接等)。未释放这些资源会导致内存泄漏或资源泄漏。以下是一些典型需要释放资源的场景:1.动态内存分配通过new、new[]、malloc、calloc......
  • 用C++写数字直角三角形和摘苹果问题
    题目描述给出n,请输出一个直角边长度是 n的数字直角三角形。所有数字都是2位组成的,如果没有2位则加上前0。输入格式输入一个正整数n。输出格式输出如题目要求的数字直角三角形。输入输出样例输入#1复制5输出#1复制010203040506070809101112131415说明......
  • C向C++过渡篇(三)
    ----------cin和coutcin的作用类似C语言中的scanfcout的作用类似C语言中的printf区别:cin和cout不是函数,是C++中用来进行输入和输出的一个对象使用时,不需要去指定格式符(%d,%c,%f之类的),在使用时,要包含头文#include<iostream>cin和cout可以理解为变量,它们是存在于一个叫做......
  • C++ lower_bound 函数用法
    C++lower_bound函数用法因为文本块不支持下划线,所以以下均打成\(\text{lower-bound}\)。虽然只是简单语法,但是我确实不太能记住。比如很多分块题要求在整块二分,此时如果能善用\(\text{lower-bound}\)函数就能少写一个二分。然后本文只是作者自己看源代码理解的,当然是有不......