设计一个程序, 输入两个整数n,m. 输出它们的最大公因数和最小公倍数
样例输入:
10, 15
样例输出:
5, 30
#include <iostream>
#include <conio.h>
#include <math.h>
//定义啷个宏,方便后面操作
#define MAX(a,b) (a>b)?a:b
#define MIN(a,b) (a<b)?a:b
using namespace std;
/**程序窗口*/
void winos();
//判断输入是否合法(范围 非数字判断 )
void User_Input(int* a);
int main()
{
while (1)
{
int a = 0, b = 0;//假设这两个数字是最大公约和最小公倍数
int Remainder; // 余数
int m, n; // 用户输入
cout << "请输入第一个数字\n";
User_Input(&m);
cout << "请输入第二个数字\n";
User_Input(&n);
//使用宏替换的方式 给 a和 b赋值
a = MAX(m, n);
b = MIN(m, n);
//然后判断,如果两个数取余不是0进去循环
while (a % b != 0)
{
//获得余数
Remainder= a % b;
//a拿到b的值
a = b;
//b拿到余数
b = Remainder;
}
//打印结果
cout << "最大公约数为:" << b << endl;
cout << "最小公倍数为:" << m * n / b << endl;
cout << "还要继续玩吗? (任意键继续玩,按n退出程序)\n";
char ch = ' ';
if (ch = _getch(), ch == 'n' || ch == 'N')
{
break;
}
}
system("pause");
return 0;
}
//判断输入是否合法(范围 非数字判断 )
void User_Input(int* a)
{
do {
//如果输入函数返回值是1,代表输入正确 跳出循环
if (scanf("%d", a) == 1)
{
break;
}
//如果返回值不是1,执行下面的,
char choice;
//循环字符缓冲区内容
while ((choice = getchar()) != '\n' && choice != EOF);
printf("输入的不是数字!请重新输入 ");
} while (scanf("%d", a) != 1);
}
void winos()
{
system("title 做题"); //设置CMD窗口 标题
system("color 4E"); //窗口显示颜色
system("mode con cols=65 lines=35");//设置窗口大小
printf("\t\t※当 前 时 间※\n\n"); //窗口显示时间
printf("\t\t"); //为了好看
system("date /T"); // 窗口显示时间
printf("\t\t"); //为了好看
system("TIME /T"); // 窗口显示时间
}