自整除数
描述
对一个整数n,如果其各个位数的数字相加得到的数m能整除n,则称n为自整除数。 如21,21%(2+1)==0,所以21是自整除数。 现求出从10到n(n<100)之间的所有自整除数。
要求: 编写一个求各位数的和的函数。
输入
输入只有单独一行的一个整数n(10<=n<100)。
输出
输出有多行。 按从小到大的顺序输出所有大于等于10,小于等于n的自整除数,每行一个自整除数。
输入样例 1
47
输出样例 1
10 12 18 20 21 24 27 30 36 40 42 45
#include <iostream>
using namespace std;
// 求一个数的各位数字之和
int sumOfDigits(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10; // 取个位数并累加
num /= 10; // 去掉个位数
}
return sum;
}
// 判断一个数是否为自整除数,并输出符合条件的数
void findSelfDividingNumbers(int n) {
for (int i = 10; i <= n; ++i) {
int digitSum = sumOfDigits(i); // 计算各位数的和
if (i % digitSum == 0) { // 判断是否能整除
cout << i << endl;
}
}
}
int main() {
int n;
cin >> n; // 输入n,保证10 <= n < 100
findSelfDividingNumbers(n); // 查找并输出自整除数
return 0;
}