C语言入门:计算所有N位水仙花数

C语言:计算所有N位水仙花数


输入数字 n 控制几位数

自动计算该位数中所有的回归数

程序边界3至7位数

#include<stdio.h>
#include<stdlib.h>
void main()
{
	int n;         //位数,需要输入
    int min,max; //n位数的最小、最大数,当n确定后,如n=5:则min是10000,max是99999
	int data;      //要判断的数据,循环取从min到max的数,循环体内判断data是不是水仙花数
	               //  判断n位数data是否水仙花数,即判断data的每位数的n次幂的和是否等于data本身。
	int temp,d;    //取组成data的每位数所需的变量。
	               //  data分解成(其他位+最低位),temp是取掉最低位的其他位,d是取到的最低位,如12345:temp=1234时d=5
	int pow,i;     //pow是d的n次幂,以循环变量i控制d乘以自身n次得到pow
	int sum;       //所有数位的n次幂的和,即pow的累加和
    
	printf("请输入所求水仙花数的位数(3-7之间):\n");
    scanf("%d",&n);

    //根据输入的位数n,求出min:min=10的(n-1)次幂,1循环乘以n-1次10就可以得到
	min=1;
    for(i=1;i<n;i++)
    {
        min = min*10;
    }
	//根据min求出max:max=min*10-1
	max=min*10-1;

    //从min到max,遍历每个n位数 
    for(data=min;data<=max;data++)
    {
		//对temp取最低位d,计算其n次幂pow,累加到sum,去掉最低位的其他位赋给temp再次循环
		sum = 0;
        temp = data;
        while(temp>0) //只要temp>0,就还有数位要处理
        {
			d = temp % 10;
			//计算d的n次幂给pow
			pow = 1;
			for(i=1;i<=n;i++)
			{
				pow = pow * d;
			}
			//将本次循环所取到的数位d的n次幂pow累加到sum
			sum = sum + pow;   
			//去掉最低位的数据参加下次循环,当temp是个位整数,temp/10=0 会结束循环
			temp=temp / 10;
        }
        if(sum==data)//每位数n次幂的和sum等于data本身,则data是水仙花数
        {
            printf("%d\n",data);
        }
    }
	system("pause");
}

 

  • 11
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jason Li808

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值