C语言编程题——求水仙花数(自幂数)

自幂数

一个n位数的每一位数的n次方之和等于它本身的话就称之为自幂数

水仙花数

“水仙花数”是指一个3位数,其各位数字的3次方之和刚好等于该数本身,
如:153=1^3+5 ^3 + 3 ^3,则153是一个“水仙花数"。
注:水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

求自幂数

求1 - 100000之间的所有自幂数
既然水仙花数是自幂数的一种,那么能求出自幂数自然能求出水仙花数。
所以就写一段通用代码。

int i;

        for(i = 0;i <= 100000;n++)//判断i是否为自幂数

求解思路

判断 i 是否为自幂数(水仙花数)
1、计算 i 的位数,知道 i 是n位数
int n = 1;//先设次方为1,任何1位数至少是一次方
假设 i = 123,让 i 一直除10得到商,然后n自增,直到商 = 0的时候说明已经算到了最后
//123/10 = 12 n++;,12/10 = 1 n++;,1 / 10 = 0;此时n为3。

        for(i = 0;i <= 100000;i++)//判断n是否为自幂数
        {
                int n = 1,t = i,sum = 0;
                 //1.计算i的位数—— n位数
                while(t /= 10)//如果用i来/= 10的话,会改变i的值,所以用t代替i
                {       
                        n++ ;
                }

2、计算 i 的每一位的 n 次方之和,假设和为sum。

				//2.计算i的每一位的n次方之和sum
                t = i;
                while(t)//t不为0的话说明i 是多位数
                {
                        sum += pow(t % 10,n);//t % 10得到最低位,然后乘上n次方
                        t /= 10;//t % 10之后已经得到1位了,/10把这个数去掉
                }

3、比较 i 是否等于sum。

//3.比较i == sum
                if(i == sum)
                {
                        printf("%d ",i);
                }

完整代码

#include <stdio.h>
#include <math.h>

int main()
{

        int i;

        //判断i是否为自幂数
        for(i = 0;i <= 100000;i++)
        {
                int n = 1,t = i,sum = 0;

                //1.计算i的位数—— n位数
                while(t /= 10)//若果用i来/= 10的话每次i++之后一进来循环就把改成0,会出问题,所以用t代替i
                {
                        n++ ;
                }

                //2.计算i的每一位的n次方之和sum
                t = i;
                while(t)//t不为0的话说明i 是多两位数
                {
                        sum += pow(t % 10,n);//t % 10得到最低位,然后乘上n次方
                        t /= 10;//t % 10之后已经得到1位了,/10把这个数去掉
                }

                //3.比较i == sum
                if(i == sum)
                {
                        printf("%d ",i);
                }

        }
        putchar('\n');
        return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值