手把手带你刷好题—— 35.水仙花数(鹏哥的写法)(作业非力扣)
Posted 安然无虞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手带你刷好题—— 35.水仙花数(鹏哥的写法)(作业非力扣)相关的知识,希望对你有一定的参考价值。
【前言】
今天是刷题打卡第35天!
不负代码不负卿,加油老铁们。
原题:水仙花数(自幂数)
题目描述:
打印1~100000之间的水仙花数,水仙花数指的是一个n 位数,其各位数字的n 次方之和刚好等于该数本身。
示例:
153 = 1^3 + 5^3 + 3^3
思路:
- 先判断是几位数
- 再求每一位的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;
高大上函数包装:
结语
今天是刷题打卡第35天!
加油吧少年。
以上是关于手把手带你刷好题—— 35.水仙花数(鹏哥的写法)(作业非力扣)的主要内容,如果未能解决你的问题,请参考以下文章