用c++代码写出来输入格式: 第一行输入一个整数n(0<n<=10000),表示有n组测试数据; 随后的n行输入两个整数i,j(0<i,j<=32767)。 输出格式: 输出每组测试数据的最大公约数和最小公倍数
时间: 2024-09-08 22:02:30 浏览: 72
为了完成这个任务,我们需要编写一个C++程序,该程序首先接收整数n,表示测试数据的组数。然后,对于每组测试数据,接收两个整数i和j,计算它们的最大公约数(GCD)和最小公倍数(LCM)。我们可以使用辗转相除法(也称为欧几里得算法)来计算最大公约数,然后利用最大公约数来计算最小公倍数,因为两个数的乘积等于它们的最大公约数与最小公倍数的乘积。
以下是C++代码实现:
```cpp
#include <iostream>
using namespace std;
// 函数声明
int gcd(int a, int b); // 计算最大公约数
int lcm(int a, int b, int gcdValue); // 计算最小公倍数
int main() {
int n;
cin >> n; // 输入测试数据组数
while (n--) { // 对于每组测试数据
int i, j;
cin >> i >> j; // 输入两个整数
int gcdValue = gcd(i, j); // 计算最大公约数
int lcmValue = lcm(i, j, gcdValue); // 计算最小公倍数
cout << gcdValue << " " << lcmValue << endl; // 输出结果
}
return 0;
}
// 辗转相除法计算最大公约数
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 计算最小公倍数,利用最大公约数
int lcm(int a, int b, int gcdValue) {
return (a / gcdValue) * b; // 先除后乘防止溢出
}
```
这段代码首先通过输入接收整数n,然后进入一个循环,每次循环接收两个整数i和j,并计算它们的最大公约数和最小公倍数,最后输出这两者。
阅读全文