手把手带你刷LeetCode——19.水仙花数(作业)
Posted 安然无虞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手带你刷LeetCode——19.水仙花数(作业)相关的知识,希望对你有一定的参考价值。
【前言】
今天是力扣打卡第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天!
昨天太忙了,没来得及发,这篇是补昨天的,抱歉抱歉哈。
以上是关于手把手带你刷LeetCode——19.水仙花数(作业)的主要内容,如果未能解决你的问题,请参考以下文章