题目描述:
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。变量类型使用long long int 。
输入两个正整数
输出最大公约数最小公倍数
如果输入的数中包含负数,则输出工nput Eeror
样例输入:
6 15
样例输出:
3 30
提示:
负数没有最大公约数和最小公倍数;
最大公约数和最小公倍数一定为正数,不可以为负数;
需要考虑代码运行效率,否则会评测超时。
源代码
#include <stdio.h>
// 求最大公约数的函数
long long int gcd(long long int a, long long int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 求最小公倍数的函数
long long int lcm(long long int a, long long int b) {
return a * b / gcd(a, b);
}
int main() {
long long int a, b;
scanf("%lld %lld", &a, &b);
if (a <= 0 || b <= 0) {
printf("Input Error");
return 0;
}
// 求最大公约数和最小公倍数
long long int g = gcd(a, b);
long long int l = lcm(a, b);
// 输出结果
printf("%lld %lld\n", g, l);
return 0;
}
该程序定义了两个函数 gcd()
和 lcm()
,用于分别求两个整数的最大公约数和最小公倍数。在主函数中,首先通过 scanf()
函数读取输入数据,并对输入数据进行判断,若输入数据中包含负数或者有 0,直接输出 “Input Error” 并结束程序。然后调用 gcd()
和 lcm()
函数求出最大公约数和最小公倍数,并使用 printf()
函数输出结果。
在 gcd()
函数中,采用递归方式求取最大公约数。若 b
为 0,则说明 a
是最大公约数;否则继续递归调用 gcd(b, a % b)
。
在 lcm()
函数中,先求出两个数的最大公约数,然后将两数相乘再除以最大公约数,即可得到最小公倍数。
注意,在本题中,需要注意输入数据中是否包含负数或者 0,若包含则输出 “Input Error”。此外,题目要求变量类型使用 long long int
,以避免整数溢出。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END