【前言】
今天是力扣打卡第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天!
昨天太忙了,没来得及发,这篇是补昨天的,抱歉抱歉哈。