习题5-6 使用函数输出水仙花数【不完善,请指教】

在这里插入图片描述题目网址: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);
		}
	}
} 

但是我这个不完善在这里插入图片描述
所以有没有大神来指点我一下,谢谢啦!

猜你喜欢

转载自blog.csdn.net/CSDN_YJX/article/details/113312056
今日推荐