点击上方 蓝字关注我们

大家好,我是阿汤哥。
看知乎上有朋友说还不明白怎么判断水仙花数,今天我们就来看看这个问题。(PS:“求1000以内的水仙花数”这道题阿汤哥记忆犹新。到现在还记得这是我大一上学期期末考试的编程题。)
怎么求水仙花数?首先给出水仙花数定义。
水仙花数 定义
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。怎么判断一个三位整数是不是水仙花数呢?我们根据它的定义来判断,只要把个位数、十位数、百位数分别取出来,然后做立方和,判断立方和是否等于这个数本身。
现在难点在于,怎么编程求一个三位数的个位数、十位数、百位数?
我们这样来求:
假设一个三位数m=132,我们这样来求它的个十百位数:
求 个十百位数
1、求它的个位数,用这个数对10求余数,个位数a=132%10= 2
2、求它的十位数,把这个数先除以10,商等于13,商13再对10求余数,得到十位数b=13%10=3
3、求它的百位数,把这个数对100求商,百位数c=132/100=1
我们来C语言编程实现“求1000以内的水仙花数”,下面是完整代码:
C语言代码
/**
* Author: 阿汤哥
* 微信公众号:C语言修仙
* 功能: 求1000以内的水仙花数
*/
# include
# include
/**
* is_narcissus_number: 判断一个整数是不是素数
*
* @m: 待判断是不是水仙花数的三位数
*
* 返回1:是素数;返回0:不是素数
*/
int is_narcissus_number(int m){
int a, b, c;
c = m % 10; //个位数
b = (m/10) % 10; //十位数
a = m / 100; //百位数
if (m == (pow(a, 3)+ pow(b, 3)+ pow(c, 3)))
return 1;
else
return 0;
}
int main(){
int m, a, b, c;
//循环判断100~999每个数,如果是水仙花数,那么把它打印出来
for (int i = 100; i 1000; i++)
{
if (is_narcissus_number(i) == 1)
{
printf("%d 是水仙花数;\n", i);
}
}
return 0;
}
运行结果往期推荐好文
★C语言编程工具的选择★i++和++i有什么区别?★「建议收藏」C语言编程判断回文数★看完你就明白:什么情况下该用int main(int argc, char *argv[])而不是int main(void)★C语言编程:打印一个圆形★福利:50本C语言电子书免费送了!★C语言编程求解:1到1000之间所有的素数点个在看 你最好看
