水仙花数:一个三位数,其按位立方之和等于该数本身,该数称为水仙花数。 (其实,水仙花数是“自幂数”中的一种;自幂数:一个n位数,其按位数字的n次方之和,等于该数本身。) 三位的水仙花数共有4个:153,370,371,407 |
//水仙花数:一个三位数,其按位立方之和等于该数本身,该数称为水仙花数。
//(其实,水仙花数是“自幂数”中的一种;自幂数:一个n位数,其按位数字的n次方之和,等于该数本身。)
// 三位的水仙花数共有4个:153,370,371,407
#include<stdio.h>
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<stdio.h>
#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");
分析: 函数方案存在着函数调用的“系统消耗”(暂时不解释,只需知道,函数的调用是有代价的!),但可以实现模块化编程; 宏替换的方案,是不存在函数调用关系的, 但是,宏不能起到简化运算的作用。 |