今天要讲解的这道题是 水仙花数判断
题目要求
本题要求实现一个函数,判断任一整数是否为水仙花数(必须是三位数,且数的每一位上数字的立方和与数本身相等)。例如153=13+53+3^3=1+125+27=153,而1或155则不是水仙花数。如果是水仙花数,则函数返回1,否则返回0.
函数接口定义:
int func(const int N);
其中N是用户传入的参数。N的值不超过int类型的范围。如果参数N是水仙花数,则返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
int func(const int N);
int main()
{
int N;
scanf("%d", &N);
printf("%d
", func(N));
return 0;
}
/* 请在这里填写答案 */
输入样例:
153
输出样例:
1
解题思路
- 根据题目要求,定义一个函数func()
- 定义变量n,sum
- 因为需要求一个三位数的整数各位的立方和,所以我们要分离每一位上的数,用到表达式sum+=(n%10) * (n%10) * (n%10),因为需要对每一位数求立方,所以此表达式需循环,并且我们要求到下一位,用到表达式n/=10,在求了立方和的基础上,我们要进行判断是否等于输入值
题目代码
涉及知识点
1.给n赋值为N,因为n是形参,N是实参,输入值实际是N,我们要判断的也是输入值N
2。while语句,这是一个新的循环语句,括号里面表示的是条件,我代码中写的是while(n),它也就相当于while(n!=0),这是一种简便写法,计算机也会自动去给我们判断,当条件判定为‘是’时,循环进行,否则跳出循环
3.表达式sum+=(n%10) * (n%10) * (n%10)与n/=10,这里用的取余的方法求各位数立方的和,因为变量n,sum定义为整型,取结果时,计算机会自动给我们取整数,比如153%10还余3,sum表达式就会求3的立方,接着153/10=15.3,15.3再次取余时,结果为5,以此循环,求得立方和
4.最后进行判断,并返回结果