题目网址:https://pintia.cn/problem-sets/12/problems/306
函数接口定义:
int narcissistic( int number );
void PrintN( int m, int n );
函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。
裁判测试程序样例:
#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
153 400
输出样例:
153 is a narcissistic number
370
371
示例:
int narcissistic( int number )
{
int cnt = 0, sum = 0, i,j,x;
int a = number;
while (a)
{
a /= 10;
cnt ++;
} // cnt 记录水仙花数的幂。也就是这个数有几位数
a = number;//重新赋值,方便接下来的运算
for (i = 0; i < cnt; i ++) //整个大循环完事之后sum的值就是最终值
{
x = a % 10; // 分解number 的每一位
int pow = 1;
for (j = 0;j < cnt; j ++)//这就不止是三位数了,是N位,如果是三位数,那么就没有前边的cnt了,直接循环三次
{
pow *= x;
}
sum += pow;//每个位上的数字的N次幂之和
a /= 10;//为下一次分解做准备
}
if (sum == number)
return 1;
else return 0;
}
void PrintN( int m,int n )//一个简单的循环
{
while(m <= n)
{
m++;
if(narcissistic(m))//判断是不是水仙花数
{
printf("%d\n",m);
}
}
}
但是我这个不完善
所以有没有大神来指点我一下,谢谢啦!