##习题5-6 使用函数输出水仙花数

习题5-6 使用函数输出水仙花数(20 分)

水仙花数是指一个N位正整数(N3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义:

int narcissistic( int number );
void PrintN( int m, int n );

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100mn10000。

裁判测试程序样例:

#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

#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;
}

int narcissistic(int number){
	
	int temp1,result=0;
	int flag = number; //标记一下number用于最终判断 
	
	 while(number){

		temp1 = number % 10;  //用'%'获取number的个位数	 
		 	
	 	result  += temp1*temp1*temp1;
	 	
	 	number = number /10;  //用'/'去掉最后一位数 
	 	
	 }
	 
	 if(result == flag)
	 	return 1;
	 else 
	 	return 0;
	 
}

void PrintN(int m, int n){
	
	int i; 

	for( i=m+1 ; i<n ; i++ ){
		if(narcissistic(i)){
			printf("%d\n",i);
		}
	}
/*
	本题结果显示正确,以下三个测试案例提示错误:
		m最小,n另外输出;
		m==n要输出;
		最大区间;
		
	根据提示作出如下更改,但由于函数是void型,无返回值,所以m,n特殊情况如何输出? 
*/
/*
	if(m<100||m==n||n>10000){
		
	}else{
		for( i=m+1 ; i<n ; i++ ){
			if(narcissistic(i)){
				printf("%d\n",i);
			}
		}				
		}	
*/
}


猜你喜欢

转载自blog.csdn.net/sinat_32638605/article/details/80597746