“水仙花数"是指一个三位正整数,其各位上的数字的立方和等于该数本身。如:1^3+5^3+3^3=153,因此153是一个水仙花数。输入两个三位正整数a和b(其中a<=b),求[a,b]范围内水仙花数的个数。
输入输出示例:
输入: 100,999
输出: 4
方法一:
#include <stdio.h>
int main() {
int a, b, count = 0;
scanf("%d,%d", &a, &b);
for (int i = a; i <= b; i++) {
int sum = 0, temp = i;
while (temp) {
int digit = temp % 10;
sum += digit * digit * digit;
temp /= 10;
}
if (sum == i) count++;
}
printf("%d\n", count);
return 0;
}
方法二:
#include <stdio.h>
int main() {
int a, b, i, j, k, count = 0;
scanf("%d,%d", &a, &b);
for (i = a; i <= b; i++) {
j = i / 100; // 百位数
k = i % 100; // 十位数和个位数
if (i == j * j * j + (k / 10) * (k / 10) * (k / 10) + (k % 10) * (k % 10) * (k % 10)) {
count++;
}
}
printf("%d", count);
return 0;
}
方法三:
#include <stdio.h>
// 判断一个三位正整数是否为水仙花数,是返回1,不是返回0。
int is_narcissistic_number(int num) {
int sum = 0, digit;
int temp = num;
while (temp != 0) {
digit = temp % 10;
sum += digit * digit * digit;
temp /= 10;
}
if (sum == num) {
return 1;
}
else {
return 0;
}
}
// 获取[a,b]范围内水仙花数的个数
int get_narcissistic_number_count(int a, int b) {
int count = 0;
for (int i = a; i <= b; i++) {
if (is_narcissistic_number(i)) {
count++;
}
}
return count;
}
int main() {
int a, b;
printf("请输入两个三位正整数a和b(a<=b):");
scanf("%d,%d", &a, &b);
int count = get_narcissistic_number_count(a, b);
printf("[%d,%d]范围内水仙花数的个数为:%d\n", a, b, count);
return 0;
}