C语言之水仙花数

水仙花数

 水仙花数(Narcissistic number)也被称为超自然数字不变数(pluperfect digital invariant, PPDI)、自恋数、自慕数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。

  • 一个三位数,如果等于它的三个数字的三次方之和,则该三位数称为三位水仙花数;
  • 一个四位数,如果等于它的四个数字的四次方之和,则该四位数称为四位水仙花数;

如:153= 1^3+ 5^3+ 3^3=1+125+27             

则称153为三位水仙花数。 

因此,如果我们想要求100-1000的三位水仙花数及其个数,可以用求余和整除的方法,将所求范围内的数字各位数上的数值拆分出来,做三次幂的运算或四次幂的运算。判断其是否符合水仙花数的要求,若符合则将其输出。

编程思路 (三位水仙花数)

  1.  首先,设置变量1,确保遍历指定范围内的所有数,可以用 for 循环,变量的初始值为该范围内的首项,小于该范围的最大项。
  2. 其次,设置变量2,变量3,变量4,变量5(水仙花数的数量)。
  3. 个位(变量2):对变量1除10求余保存进变量2。(变量2=变量1%10)
  4. 十位(变量3):对变量1除100求余之后再除10保存进变量3。(变量3=(变量1%100)/10)
  5. 百位(变量4):对变量1除100。(变量4=变量1/100)
  6. 最后,用 if 条件语句判断变量2,3,4做三次幂运算是否等于变量1,若是则输出,使作为数量的变量5累加,若不是,则继续循环,直到遍历完变量1的所有数为止。

 编程思路 (四位水仙花数)

  1.  首先,设置变量1,确保遍历该范围内的数,可以用 for 循环,变量的初始值为该范围内的首项,小于该范围的最大项。
  2. 其次,设置变量2,变量3,变量4,变量5,变量6。
  3. 个位(变量2):对变量1除10求余,保存进变量2。(变量2=变量1%10)
  4. 十位(变量3):对变量1除100求余再除10,保存进变量3。(变量3=(变量1%100)/10)
  5. 百位(变量4):对变量1除1000求余之后除100,保存进变量4。((变量4=变量1%1000)/100)
  6. 千位(变量5):对变量1除1000,保存进变量5。(变量5=变量1/1000)
  7. 最后,用 if 条件语句判断变量2,3,4,5做四次幂运算是否等于变量1,若是则输出,使作为数量的变量6累加,若不是,则继续循环,直到遍历完变量1的所有数为止。

源代码(三位水仙花数)

#include<stdio.h>
int main(){
    int m,n;		                    //计算的范围。
	int i;			                    //作为变量 1存在。
	int a,b,c;		                    //个位(变量2)十位(变量3)百位(变量4)
	int counter=0;		                //水仙花数的数量,先初始化为 0。
    scanf("%d %d",&m,&n);
    if(m<100||n<100||m>n||m>100||n>999){
                                        //判断输入数值是否合法。
    	printf("Your entry is invalid, please re-enter.");
    	return 1;
    }
    for(i=m;i<=n;i++){		            //遍历 m-n 指定范围。
        a=i%10;			                //个位(变量 2)
        b=(i%100)/10;		            //十位(变量 3)
        c=i/100;		                //百位(变量 4)
        if(i==a*a*a+b*b*b+c*c*c){		//条件判断是否符合水仙花数的条件。
        	counter++;
        printf("%d\n",i);		        //输出水仙花数
        }
    }
    printf("There are %d Narcissistic number in total.",counter);
                                        //输出水仙花数的数量。
    return 0;
}

输入格式 

bfb147a6f4454e7a9df0a1ff3ef57bc5.png

输出格式 

1211a3a5f18f4f449b1833d582134345.png

 源代码(四位水仙花数)

#include<stdio.h>
int main(){
    int m,n;		                    //计算的范围。
	int i;			                    //作为变量 1存在。
	int a,b,c,d;		                //个位(变量2)十位(变量3)百位(变量4)千位(变量5)
	int counter=0;		                //水仙花数的数量,先初始化为 0。
    scanf("%d %d",&m,&n);
    if(m<1000||n<9999||m>n||m>1000||n>9999){
                                        //判断输入数值是否合法。
    	printf("Your entry is invalid, please re-enter.");
    	return 1;
    }
    for(i=m;i<=n;i++){		            //遍历 m-n 指定范围。
        a=i%10;			                //个位(变量 2)
        b=(i%1000)%100/10;		        //十位(变量 3)
        c=i%1000/100;		            //百位(变量 4)
        d=i/1000;						//千位(变量 5)
        if(i==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d){	
										//条件判断是否符合水仙花数的条件。
        	counter++;
        printf("%d\n",i);		        //输出水仙花数
        }
    }
    printf("There are %d Narcissistic number in total.",counter);
                                        //输出水仙花数的数量。
    return 0;
}

 输入格式

6cd5047150e2494d99563297a65e44fc.png

输出格式 

d28a8689830844b5bec430bb796f1098.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值