|
问题描述 | 一个三位的十进制整数,如果它的三个数位的数字立方和等于这个数的数值,则称它为一个“水仙数”。编写程序,计算出某一范围内的所有“水仙数” |
输入形式 | 从控制台输入两个整数(以空格分割),分别表示数据范围的下限m和上限n,且满足0<=m<=n<=10000 |
输出形式 | 向控制台输出在该数据范围内(包括数据的上下限)的所有“水仙数”,以从小到大的顺序显示在一行上,各数之间以空格分割。若该数据范围内没有“水仙数”,则输出字符串No Answe |
样例输入1 | 50 370 |
样例输出1 | 153 370 |
样例1说明 | 输入的数据范围下限为50,上限为370。因为要求水仙数为三位数,所以实际上就是求100~370之间的 水仙数,由于13 + 53 + 33 = 153,33 + 73 + 03 = 370,因此该范围内的水仙数为153和370(包括上限370) |
样例输入2 | 110 150 |
样例输出2 | No Answer |
样例2说明 | 输入的数据范围下限为110,上限为150。因为该数据范围之间没有水仙数,所以输出字符串No Answer |
#include <stdio.h>
#define N 90
int main()
{
int m, n, i, a[N], b, c, d, j = 0;
scanf_s("%d%d", &m, &n);
if (m < 100)//将不是三位数的部分去掉
m = 100;
if (n >= 1000)
n = 999;
for (i = m; i <= n; i++)//判断水仙数
{
d = i % 10;//个位数
b = i / 10 % 10;//十位数
c = i / 100;//百位数
if (i == d * d * d + b * b * b + c * c * c)
{
a[j] = i;
j++;
}
}
if (j == 0)
printf("No Answer");
for (i = 0; i < j; i++)
{
printf("%d ", a[i]);
}
return 0;
}