C语言求解任意范围内的水仙花数

C语言求解任意范围内的水仙花数

1. 定义

水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

2. C语言求解

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

/**
 * @author: 张翊
 * @TIME: 2021/5/15 15:10
 * @Description:
 求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
 */
int judge(int);

int main()
{
    int max, min;
    printf("请输入所求水仙花数的下界(最小值)以及上界(最大值)\n");
    scanf("%d %d", &min, &max);
    //定义计数器,方便输出使用
    int count = 0;
    for (int i = min; i <= max; ++i)
    {
        //计算该数字为几位数
        int n = judge(i);
        //临时存放n位数字的n次幂之和
        int sum = 0;
        //临时存放数字的每一位
        int temp;
        //将当前数字存储到replace,防止循环取模、自除改变i值
        int replace = i;
        //循环取模、自除求解计算n位数字的n次幂之和
        while (replace != 0)
        {
            temp = replace % 10;
            replace = replace / 10;
            //调用Math库中的pow方法求解
            sum += pow(temp, n);
        }
        //如果它的每个位上的数字的 n 次幂之和等于它本身,则其为水仙花数,打印
        if (sum == i)
        {
            printf("%5d\t", i);
            //每打印一个自增一
            count++;
            //方便观察,每打印十个换一行
            if (count % 9 == 0)
            {
                printf("\n");
            }
        }
    }
    return 0;
}

/**
 * 判断一个数字是几位数
 * @param i
 * @return 数字位数
 */
int judge(int i)
{
    int count = 0;
    while (i != 0)
    {
        count++;
        i = i / 10;
    }
    return count;
}

3. 运行结果

在这里插入图片描述

4. C语言中的pow函数

头文件:#include <math.h>

pow() 函数用来求 x 的 y 次幂(次方)

其原型为:double pow(double x, double y);

pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = x^y。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值