手把手带你刷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.水仙花数(作业)的主要内容,如果未能解决你的问题,请参考以下文章

手把手带你刷LeetCode——02.出现1次和K次的数

手把手带你刷LeetCode——20.一道笔试题

手把手带你刷LeetCode——07.寻找峰值

手把手带你刷LeetCode:——04.2.3.4的幂

手把手带你刷LeetCode——11.二叉搜索树的范围和(DFS)

学渣带你刷Leetcode0001.两数之和