标题:完美整除数 | 时间限制:1秒 | 内存限制:262144K
有一种数字,可以被各个位数的数字整除,如:128 , 128 % 1 = 0 ; 128 % 2 = 0; 128 % 8 = 0; 这种数字叫做完美整除数
请按照上述规律,寻找区间内所有完美整除数并返回,包含边界值
备注:
请参照示例来解答
示例1
输入
1,22
输出
[1,2,3,4,5,6,7,8,9,11,12,15,22]
说明
将数字代入题目中,即:求1 ~ 22 之间的完美整除数,遍历循环区间内的数字,可以被各个位数整除的数字包括[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22],返回即可
示例2
输入
22,33
输出
[22,24,33]
说明
将数字代入题目中,即:求22~ 33之间的完美整除数,遍历循环区间内的数字,可以被各个位数整除的数字包括[22, 24, 33],返回即可
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
bool check(int n) {//n表示要判断的数字
int temp = n; // 保存 n 的值,以便后面计算各个位数是否整除
while (temp != 0) {
int d = temp % 10; // 求各个位数上的数字
if (d == 0 || n % d != 0) { // 判断各个位数是否整除
return false;
}
temp /= 10;
}
return true;
}
vector<int> Divid(int left, int right) {
vector<int> res;
for (int i = left; i <= right; i++) { // 遍历区间内的数字
if (check(i)) { // 判断数字是否为完美整除数
res.push_back(i); // 将完美整除数添加到结果集合中
}
}
return res;
}
int main() {
string input;
getline(cin, input);
// 使用 stringstream 将读入的字符串转换成整数
stringstream ss(input);
int left, right;
char delimiter;
ss >> left >> delimiter >> right;
vector<int> res = Divid(left, right);
cout << "[";
for (int i = 0; i < res.size(); i++) {
cout << res[i];
if (i != res.size() - 1) {
cout << ",";
}
}
cout << "]" << endl;
return 0;
}