手把手带你刷好题—— 35.水仙花数(鹏哥的写法)(作业非力扣)

Posted 安然无虞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手带你刷好题—— 35.水仙花数(鹏哥的写法)(作业非力扣)相关的知识,希望对你有一定的参考价值。

【前言】

今天是刷题打卡第35天!

不负代码不负卿,加油老铁们。

原题:水仙花数(自幂数)

题目描述:

打印1~100000之间的水仙花数,水仙花数指的是一个n 位数,其各位数字的n 次方之和刚好等于该数本身。

示例:

153 = 1^3 + 5^3 + 3^3

思路:

  1. 先判断是几位数
  2. 再求每一位的n 次方之和(模十除十)  

错误示范: 

#include<stdio.h>
#include<math.h>
int main()

	int i = 0;
	for (i = 0; i <= 100000; i++)
	
		int sum = 0;
		int n = 1;//每一个数最少是一个一位数
		//先判断是几位数
		while (i /= 10)
		
			n++;//注意n 要初始化成1开始
		
		//再求每一位数字的n次方之和
		while (i)
		
			sum += pow(i % 10, n);
			i /= 10;
		
		if (sum == i)
		
			printf("%d ", i);
		
	
	return 0;

上面的代码好像逻辑没啥问题,但是实际上是有大问题的,因为i 在循环体内部是不断变化的,这是很危险的,更是错误的! 

正确代码:

#include<stdio.h>
#include<math.h>
int main()

	int i = 0;
	for (i = 0; i <= 100000; i++)
	
		int temp = i;
		int sum = 0;
		int n = 1;//每一个数最少是一个一位数
		//先判断是几位数
		while (temp /= 10)
		
			n++;//注意n 要初始化成1开始
		
		//再求每一位数字的n次方之和
		temp = i;//注意这一步!
		while (temp)
		
			sum += pow(temp % 10, n);
			temp /= 10;
		
		if (sum == i)
		
			printf("%d ", i);
		
	
	return 0;

高大上函数包装:

https://blog.csdn.net/weixin_57544072/article/details/121409554https://blog.csdn.net/weixin_57544072/article/details/121409554https://blog.csdn.net/weixin_57544072/article/details/121409554

结语

今天是刷题打卡第35天!

加油吧少年。

以上是关于手把手带你刷好题—— 35.水仙花数(鹏哥的写法)(作业非力扣)的主要内容,如果未能解决你的问题,请参考以下文章

手把手带你刷好题——30.杨辉三角(作业)

手把手带你刷好题—— 39.按奇偶排序数组(双指针)

手把手带你刷好题—— 62.数字三角形(递推简单DP)

手把手带你刷好题—— 32.求最大公约数+求最小公倍数

手把手带你刷好题—— 36.关键字const具体用法(作业非力扣)

手把手带你刷好题—— 49.二叉搜索树的范围和(DFS+BFS)