- niehuanlin's blog
数学问题
- 2023-8-11 17:33:28 @
##数学问题
#include <bits/stdc++.h>
using namespace std;
int main() {
// (1) 求所有公约数
int a, b;
cin >> a >> b;
if (a > b) swap(a, b);
for (int i = 1; i <= a; i++) {
if (a % i == 0 && b % i == 0) {
cout << i << endl;
}
}
// (2) 求最大公约数 (穷举法)
int a, b;
cin >> a >> b;
if (a > b) swap(a, b);
for (int i = a; i >= 1; i--) {
if (a % i == 0 && b % i == 0) {
cout << i << endl;
break;
}
}
// (3) 求最大公约数 (辗转相除法)
int a, b, c;
cin >> a >> b;
if (a < b) swap(a, b);
c = a % b;
while (c > 0) {
a = b;
b = c;
c = a % b;
}
cout << b << endl;
// 2、求最小公倍数
// (1) 穷举法(小于 a * b 的所有的公倍数)
int a, b;
cin >> a >> b;
if (a > b) swap(a, b);
for (int i = b; i <= a * b; i++) {
if (i % a == 0 && i % b == 0) {
cout << i << endl;
}
}
// (2) 穷举法(最小公倍数)
int a, b;
cin >> a >> b;
if (a > b) swap(a, b);
for (int i = b; i <= a * b; i++) {
if (i % a == 0 && i % b == 0) {
cout << i << endl;
break;
}
}
// (3) 穷举法(优化)
int a, b;
cin >> a >> b;
if (a > b) swap(a, b);
for (int i = b; i <= a * b; i += b) {
if (i % a == 0 && i % b == 0) {
cout << i << endl;
break;
}
}
// (4) 借助最大公约数法(终极优化)
lcd(a, b) = (a * b) / gcd(a, b);
// 3、判断素数
// (1) 穷举法
return 0;
}
// 4. 数位处理
// (1) 提取每一位数字
int n, nn, num;
cin >> n;
nn = n; // 生成数字副本
while (nn > 0) {
num = nn % 10; // 提取各位数字
cout << num << " "; // 输出每位数字
nn = nn / 10; // 将数字降位(3位变2位)
}
cout << endl;
// (2) 数字反转和判断回文数
int n, nn, num, revN = 0;
cin >> n;
nn = n; // 生成数字副本
while (nn > 0) {
num = nn % 10; // 提取各位数字
cout << num << " "; // 输出每位数字
revN = revN * 10 + num; // 组合反转数
nn = nn / 10; // 将数字降位(3位变2位)
}
cout << endl;
cout << "revN = " << revN << endl; // 输出反转数
if (n == revN) { // 判断回文数
cout << "这是回文数" << endl;
}
return 0;
}