zzuli1063: 最大公约与最小公倍

题目描述
输入两个正整数,输出其最大公约数和最小公倍数。
输入

输入两个正整数n和m(n,m<=1000000)。输入保证最终结果在int范围内。

输出

输出两个整数,用空格隔开。表示m和n的最大公约数和最小公倍数。

样例输入

4 6

样例输出

2 12

此题和1062:求最大公约数多了一个求最小公倍数,因此我们可以在1062代码的基础上改动,添加输出最小公倍数

计算m和n的最大公约数和最小公倍数时:最小公倍数=两数乘积/最大公约数

本题也需考虑数据溢出,当两数在int范围,两数的乘积不一定在int范围,因此我们先除后乘,保证数据都在int范围,不会溢出

代码如下

#include<stdio.h>

int main()
{
	int m,n,r;//定义余数r
	int min,M,N;//这里定义的均为暂存值
	scanf("%d %d",&m,&n);
	M = m;N = n;
	if(n>m)//n大于m时,n和m进行交换
	{
		min = m;
		m = n;
		n = min;
	}
	r = m%n;//求余数
	while(r!=0)//余数不等于0时
	{
		m = n;
		n = r;
		r = m%n;
	}
	printf("%d %d",n,M/n*N);//输出最大公约数和最小公倍数,先除后乘,不会溢出
	
	return 0;
}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值