首页 > 分享 > 【手把手带你刷LeetCode】——19.水仙花数(作业)

【手把手带你刷LeetCode】——19.水仙花数(作业)

【前言】

今天是力扣打卡第19天!

太忙了,发的有点晚,抱歉哈,最近笔者作业有点多,也有几题比较好的,所以就整理出来了。

题目:求水仙花数

题目描述:

求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和正好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。

注意哦,正常我们求水仙花数算的是三位数,但是这题不是哦,本题要算到十万。

题解:

题目讲的是一个n位数,其各位数字的n次方之和正好等于该数本身,所以我们需要知道要求数的位数,并且这个数的每一位数字上的n次方也需要计算。

首先,求一个数字有多少位

int Dig(int num)

{

int count = 0;

while (num)

{

count++;

num = num / 10;

}

return count;

}

int Dig(int num)

{

int count = 0;

if (num < 10)

{

return 1;

}

else

{

count = Dig(num / 10);

return ++count;

}

}

其次,计算n的k次方 

int Pow(int n, int k)

{

int ret = 1;

if (n == 0)

{

return 0;

}

while (k)

{

ret = ret * n;

k--;

}

return ret;

}

int Pow(int n, int k)

{

if (k == 0)

{

return 1;

}

else

{

return n * Pow(n, k - 1);

}

}

最后,判断是否为水仙花数

int func(int num)

{

int sum = 0;

int number = num;

int n = Dig(num);

int i = 0;

for (i = 0; i < n; i++)

{

sum = sum + Pow(number % 10, n);

number = number / 10;

}

if (sum == num)

{

return 1;

}

else

{

return 0;

}

}

完整代码:

#include<stdio.h>

int Pow(int n, int k)

{

if (k == 0)

{

return 1;

}

else

{

return n * Pow(n, k - 1);

}

}

判断num的位数

int Dig(int num)

{

int count = 0;

if (num < 10)

{

return 1;

}

else

{

count = Dig(num / 10);

return ++count;

}

}

int func(int num)

{

int sum = 0;

int number = num;

int n = Dig(num);

int i = 0;

for (i = 0; i < n; i++)

{

sum = sum + Pow(number % 10, n);

number = number / 10;

}

if (sum == num)

{

return 1;

}

else

{

return 0;

}

}

int main()

{

int i = 0;

for (i = 0; i <= 100000; i++)

{

if (1 == func(i))

{

printf("%dn", i);

}

}

return 0;

}

总结

今天是力扣打卡第19天!

昨天太忙了,没来得及发,这篇是补昨天的,抱歉抱歉哈。

相关知识

作业打卡 设置密码 &水仙花数& 查找字符串
水仙花数
LeetCode 1
打印“水仙花数”
C++: 水仙花数
3497. 水仙花数
打印水仙花数
Python 水仙花数练习
3.水仙花数
水仙花数(调用函数)

网址: 【手把手带你刷LeetCode】——19.水仙花数(作业) https://m.huajiangbk.com/newsview391221.html

所属分类:花卉
上一篇: 水仙花的繁殖方式以及病害防治、作
下一篇: 黄水仙:栽培、意义等