C语⾔使⽤递归求⽔仙花数字(相对来说⽐较简短)
⽔仙花数字0-100000
⽔仙花俗称⾃恋数,指⼀个三位数,其位数的3次⽅之和为该数本⾝时该数就为⽔仙花数。
⽔仙花数只是⾃幂数的⼀种,严格来说3位数的3次幂数才称为⽔仙花数。
附:其他位数的⾃幂数名字
⼀位⾃幂数:独⾝数
两位⾃幂数:没有
三位⾃幂数:⽔仙花数
四位⾃幂数:四叶玫瑰数
五位⾃幂数:五⾓星数
六位⾃幂数:六合数
七位⾃幂数:北⽃七星数
⼋位⾃幂数:⼋仙数
九位⾃幂数:九九重阳数
⼗位⾃幂数:⼗全⼗美数
以下为代码实现部分,因为计算⽔仙花数和计算⾃幂数的⽅法相同,只是计算范围不同,因此,本次代码实现的是算出1-100000内的⾃幂数。#include<stdio.h>
//乘法器,负责将传进来的个位⼗位百位千位数字分别⾃乘位数的n次⽅
//k是为了能正常实现n次⽅⽽传进去的,k值作⽤为约束递归函数的参数使⽤
//k的位数刚好是要计算的数的位数
int mul(int i,int k)
{
int sum=1;
sum*=i;
if(k/10!=0)
{
return sum*mul(i,k/10);
}
else
{
return i;
}
}
//cul计算,负责将各个位的n次⽅值相加起来,返回总和
int cul(int i){
int sum=0;
int j=1;
int k=i;
//j的作⽤为让其能成功加上最后⼀个数,因为如果只使⽤i/10作为判断时,当i
//为个位数时,程序已经终⽌,没办法传个位数进mul函数进⾏乘法运算,因此设j值
while((i/10>0?i/10:j--))
{
sum+=mul(i%10,k);
i/=10;
}
return sum;
}
int main()
{
int i=0;
for(i=0;i<100000;i++)递归函数c语言规则
{
if(cul(i)==i)printf("%d ",i);
}
return0;
}