水仙花数是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3,则153是一个“水仙花数”。指一N位数,其各个数之N次方和等于该数。例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数。严格来说,水仙花数指三位数的三次幂各数字的3次方之和等于其本身。以下介绍了如何打印水仙花数及n位数的求解方法。
首先介绍课本上的方法:
//打印水仙花数
#include <stdio.h>
int main()
{ int i,j,k,n;
printf("水仙花数:",n);
for(n=100;n<1000;n++)
{ i=n/100;
j=( n/10)%10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%d ",n); }
return 0; }
利用该方法打印四叶玫瑰数的样例如下:
//打印四叶玫瑰数
#include <stdio.h>
int main()
{ int i,j,k,m,n;
printf("四叶玫瑰数:");
for(n=1000;n<10000;n++)
{ i=n/1000;
j=n/100%10;
k=n/10%10;
m= n%10;
if(n==i*i*i*i+j*j*j*j+k*k*k*k+m*m*m*m)
printf("%d ",n); }
return 0; }
这种方法简单易懂,但是当n值较大时步骤更为繁琐。在此介绍两种相对简单的求解步骤:
//1.打印水仙花数
#include <stdio.h>
int main( )
{
int i,k,n,sum;
printf("水仙花数:");
for(i=100;i<1000;i++)
{
for(sum=0,k=i;k;k/=10)
{
n=k%10;
sum+=n*n*n;
}
if(i==sum) printf("%d ",i);
}
return 0;
}
由此可知求解四叶玫瑰数可写为:
//1.打印四叶玫瑰数
#include <stdio.h>
int main( )
{
int i,k,n,sum;
printf("四叶玫瑰数:");
for(i=1000;i<10000;i++)
{
for(sum=0,k=i;k;k/=10)
{
n=k%10;
sum+=n*n*n*n;
}
if(i==sum) printf("%d ",i);
}
return 0;
}
这种算法省去了逐个求解的步骤,较为方便。求五角星数等只需改变循环条件和n次幂即可。再介绍另一种求解步骤。
//2.打印水仙花数
#include <stdio.h>
#include <math.h>
int main()
{ int i,m,sum;
printf("水仙花数:");
for(i=100;i<1000;i++)
{ sum=0;
m=i;
do { sum=sum+pow(m%10,3);//pow(a,b)是指a的b次幂是double型的
m=m/10; } while(m!=0);
if(sum==i)
printf("%d ",i); }
return 0; }
由此可有
//2.打印四叶玫瑰数
#include <stdio.h>
#include <math.h>
int main()
{ int i,m,sum;
printf("四叶玫瑰数:");
for(i=1000;i<10000;i++)
{ sum=0;
m=i;
do { sum=sum+pow(m%10,4);
m=m/10; } while(m!=0);
if(sum==i)
printf("%d ",i); }
return 0; }
当要打印五角星数,六合数时也是只需改变循环条件及几次幂即可。这两种可以作为求解n位数的自幂数的求解框架,根据个人喜欢套用即可。哈哈哈哈,是不是很好用捏。要是有什么不明白的,欢迎评论咨询哟。