“玫瑰花数”是指一个四位数,其各位数字的4次方和等于该数本身。
(如:1634=1*1*1*1+6*6*6*6+3*3*3*3+4*4*4*4)
注意点:
①共有四位数(即1000~9999)可设为a,b,c,d分别代表个位,十位,百位,千位
②判断的是否为玫瑰花数条件就是该未知数n的每一位的四次方之和等于该数本身
③如何得到该四位数的每一位数?
比如1634,若想得到个位数4,则可以:
a=n%10; //n%10/即1634求余得到末尾的4,就可以得到该数的个位数
若想得到1634的十位数,则可以:
b=n/10%10; //1634先除10得到163,163再对10求余得到的就是163的个位数3,也就是1634的十位数
若想得到该数的百位数,则可以:
c=n/100%10; //1634先除100得到的是16,再对16求余得到的是6,就得到1634的百位数
那么算取1634的千位,则可以:
d=n/1000; //1634除1000得到1,也就是1634的千位数
看下面的程序吧!
【方法一】:
#include<stdio.h>
void main( )
{ int a,b,c,d,n=1000;
while(n>999&&n<10000) //判断输入的数是否为四位数
{
a=n%10;
b=n/10%10;
c=n/100%10;
d=n/1000;
if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d==n) printf("%d是玫瑰花数\n",n);
else printf("%d不是玫瑰花数\n",n);
n++;
}
printf("%d不是玫瑰花数\n",n);
n++;
}
【方法二】:
#include<stdio.h>
void main( )
{ int a,b,c,d,n;
for(n=1000;n<10000;n++) //判断输入的数是否为四位数
{ a=n%10;
b=n/10%10;
c=n/100%10;
d=n/1000;
if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d==n) printf("%d是玫瑰花数\n",n);
else printf("%d不是玫瑰花数\n",n);
}
}
小结:
如果只是判断一个数是否为玫瑰花数则不用加上循环,直接输入一个数判断就行了。如:
#include<stdio.h>
void main( )
{ int a,b,c,d,n;
scanf("%d",&n); //输入被判断的数
a=n%10;
b=n/10%10;
c=n/100%10;
d=n/1000;
if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d==n) printf("%d是玫瑰花数\n",n);
else printf("%d不是玫瑰花数\n",n);
}
程序运行结果如下图: