【手把手带你刷好题】—— 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/121409554icon-default.png?t=LA92https://blog.csdn.net/weixin_57544072/article/details/121409554

结语

今天是刷题打卡第35天!

加油吧少年。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安然无虞

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值