【前言】
今天是力扣打卡第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
上一篇: 水仙花的繁殖方式以及病害防治、作 |
下一篇: 黄水仙:栽培、意义等 |