【手把手带你刷LeetCode】——19.水仙花数(作业)
【摘要】
【前言】
今天是力扣打卡第19天!
太忙了,发的有点晚,抱歉哈,最近笔者作业有点多,也有几题比较好的,所以就整理出来了。
题目:求水仙花数
题目描述:
求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数,其各位数字的n次方之和正好等于该数本身,如 : 153=1 ^ 3+5 ^...
【前言】
今天是力扣打卡第19天!
太忙了,发的有点晚,抱歉哈,最近笔者作业有点多,也有几题比较好的,所以就整理出来了。
题目:求水仙花数
题目描述:
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和正好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。注意哦,正常我们求水仙花数算的是三位数,但是这题不是哦,本题要算到十万。
题解:
题目讲的是一个n位数,其各位数字的n次方之和正好等于该数本身,所以我们需要知道要求数的位数,并且这个数的每一位数字上的n次方也需要计算。
首先,求一个数字有多少位
-
//判断num的位数
-
//正常代码
-
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次方
-
//求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;
-
}
-
}
完整代码:
-
//求出0~100000之间的所有“水仙花数”并输出。
-
//“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
-
-
#include<stdio.h>
-
//求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);
-
}
-
}
-
判断num的位数
-
//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;
-
}
-
-
}
-
//判断是否为水仙花数
-
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("%d\n", i);
-
}
-
}
-
return 0;
-
}
总结
今天是力扣打卡第19天!
昨天太忙了,没来得及发,这篇是补昨天的,抱歉抱歉哈。
文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。
原文链接:bit-runout.blog.csdn.net/article/details/121409554
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)