每日一题——“水仙花数”

简介: 哈喽大家好,我是保护小周ღ,本期为大家带来的是求“水仙花数”,此水仙花,非彼水仙花,一起来看看把~

哈喽大家好,我是保护小周ღ,本期为大家带来的是求“水仙花数”,此水仙花,非彼水仙花,一起来看看把~

image.gif编辑

题目:

求出0~100000之间的所有“水仙花数”并输出。

描述:

“水仙花数”是指一个n位数,其各位数字的n次方之和刚好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

注意范围是0~100000之间的所有符合描述的“水仙花数”。

思路解析:

根据描述,我们知道,各位数字的n次方之和刚好等于该数本身才能称之为“水仙花数”,先尝试判断一个数是否为水仙花数,怎么判断呢?

第一步:求出该数的位数n。

第二步:求出该数每一位的n次方之和。

第三步:判断该数字的n次方之和是否刚好等于该数本身

本次博主给大家带来两种解题方式,思路都是一样的,普通计数,递归计数。

普通计数:

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//统计每一个数的位数intCount(intsize)
{
intn=0;
while (size)
    {
size=size/10;
++n;
    }
returnn;
}
//判断是否为水仙花intIfDaffodil(inti,intn)
{
intsize=i;
intsum=0;
//判断是否为符合“水仙花”while (size!=0)
    {
intssum=1;
//ssum统计每一位的n次方for (intj=0; j<n; j++)
        {
ssum*=size%10;
        }
size=size/10;
//sum统计各位的n次方之和sum+=ssum;
    }
//各位数字的n次方之和确好等于该数本身if (sum==i)
    {
return1;
    }
else    {
return0;
    }
}
intmain()
{
//遍历区间for (inti=0; i<=100000; ++i)
    {
//当程序执行IfDaffodil时,会先执行完作为“参数”的Count,等Count执行完毕再执行自己intsize=IfDaffodil(i, Count(i));
if (size==1)
        {
printf("%d ",i);
        }
else        {
continue;
        }
    }
return0;
}

image.gif

image.gif编辑

递归计数:

#include<stdio.h>//统计每一个数的位数intCount(intn)
{
if (n<10)//当该数只剩个位时,递归结束return1;
elsereturnCount(n/10) +1;
/*{n=n/10;return Count(n)+1;}*/}
//计算每一位的n次方intPow(intx, intn)
{
if (n==0)
return1;
elsereturnpow(x, --n) *x;//x^n}
intmain()
{
//遍历区间for (inti=0; i<100000; ++i)
    {
intn=i;
intsum=0;
//判断是否为符合“水仙花”while (n)
        {
//n % 10 拿到最后一位,然后根据本身的位数求次方sum+= (Pow((n%10), Count(i)));//Pow计算每一位的n次方n/=10;
        }
if (sum==i)
        {
printf("%d ", sum);
        }
else        {
continue;
        }
    }
return0;
}

image.gif

image.gif编辑感兴趣的朋友可以用博主的方法,或者是自己的方法做做这道题。

分享一个牛客网上类似的题目,大家也可以尝试着做一做。

链接:水仙花数_牛客题霸_牛客网

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ  *★,°*:.☆( ̄▽ ̄)/$:*.°★*

image.gif编辑

 如有侵权请联系修改删除!

相关文章
|
6天前
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
|
6天前
春节每日一题~(自除数,除自身以外的数的乘积)
春节每日一题~(自除数,除自身以外的数的乘积)
13 1
【剑指offer】-和为S的两个数-38/67
【剑指offer】-和为S的两个数-38/67
求N位数的水仙花数--恒生笔试题
求N位数的水仙花数--恒生笔试题
|
12月前
|
Python
【基础入门题007】求所有三位的水仙花数
【基础入门题007】求所有三位的水仙花数
161 0
|
C++
蓝桥杯练习题四 - 排它平方数(c++)
蓝桥杯练习题四 - 排它平方数(c++)
84 0
|
算法
LeetCode每日一题——668. 乘法表中第k小的数
几乎每一个人都用 乘法表。但是你能在乘法表中快速找到第k小的数字吗?
94 0
牛客网——变种水仙花数
牛客网——变种水仙花数
86 0
|
测试技术
软件测试面试题:打印出100-999所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方。
软件测试面试题:打印出100-999所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方。
255 0