编程:判断一个数是否是水仙花数

水仙花数:一个三位数,其按位立方之和等于该数本身,该数称为水仙花数。

(其实,水仙花数是“自幂数”中的一种;自幂数:一个n位数,其按位数字的n次方之和,等于该数本身。)

三位的水仙花数共有4个:153,370,371,407

//水仙花数:一个三位数,其按位立方之和等于该数本身,该数称为水仙花数。
//(其实,水仙花数是“自幂数”中的一种;自幂数:一个n位数,其按位数字的n次方之和,等于该数本身。)
// 三位的水仙花数共有4个:153,370,371,407

#include

int cube(int m);   //cube表示三次幂

int cube(int m)
{
	return m*m*m;
}

	   //求m的个位数 m % 10
	   //求m的十位数 m/10 %10
	   //求m的百位数 m/100 %10


void main(void)
{
	int n;

	printf("请输入需要判断的数:");
	scanf("%d", &n);

	if((cube(n%10) + cube(n/10 %10) + cube(n/100 %10)) == n)
		printf("该数是水仙花数\n");
	else
		printf("该数非水仙花数\n");

}
#include
#define cube(m) ((m)*(m)*(m))   // #define cube(m) m*m*m  错误形式,宏定义一定要加括号


void main(void)
{
	int n;

	printf("请输入需要判断的数:");
	scanf("%d", &n);

	if((cube(n%10) + cube(n/10 %10) + cube(n/100 %10)) == n)
    //宏定义等价于 if(n == (n%10)* (n%10) *(n%10) + 
    //             (n/10%10)* (n/10%10)* (n/10%10) +
    //             (n/100%10)* (n/100%10)* (n/100%10))
    //宏不能起到简化运算的作用
		printf("该数是水仙花数\n");
	else
		printf("该数非水仙花数\n");

分析:

函数方案存在着函数调用的“系统消耗”(暂时不解释,只需知道,函数的调用是有代价的!),但可以实现模块化编程;

宏替换的方案,是不存在函数调用关系的, 但是,宏不能起到简化运算的作用。

 

你可能感兴趣的:(C语言,编程题)