c语言编写水仙花数

用c语言编写3到4位的水仙花数

方法:先弄懂什么是水仙花数::
水仙花数是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和。
3位水仙花数————先定义3个数其中一个为1--9;2个为0--9;(用for循环)
再用如果a定义为1--9那么用100*a来表示百位;如果b或者c定义是0--9那么用10*b或者10*c来表示十位;那么下面用c或者b来表示个位;
if(100*a+10*b+c==a*a*a+b*b+c) 如果满足这个条件那么:输出的printf("%d%d%d",a,b,c)就是3位数的水仙花数:

4位水仙花数方法同上:

刚写的:调试过了
#include <stdio.h>
int main(void)
{
int a,b,c,d;
system("cls");
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf("%d%d%d%d\n",a,b,c,d);
getch();
}

或者这样:
#include <stdio.h>
int main(void)
{
int a,b,c,d;
system("cls");
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
for(d=0;d<=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf("%d%d%d%d\n",a,b,c,d);
}
getch();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-12

水仙花数:是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。

参考代码:

#include<stdio.h>
int fun(int n){//判断3位数n是否是水仙花数 
int q,b,g;
q=n/100;//求出千位数 
    b=(n/10)%10;//求出百位数 
    g=n%10;//求出个位数 
    if(q*q*q+b*b*b+g*g*g==n) return 1;
    return 0;

int main()
{
 int i;
 for(i=100;i<1000;i++)
  if(fun(i)) 
  printf("%d\n",i);
 return(0);
}
/*
运行结果:
153
370
371
407
*/

第2个回答  2008-09-15
#include<stdio.h>
void main()
{
int m,a,b,c,d,p;
printf("所有三位水仙花数为:\n");
for(m=100;m<=999;m++)
{
a=(int)(m/100);
b=(int)((m-100*a)/10);
c=(int)(m-(100*a+10*b));
if(m==a*a*a+b*b*b+c*c*c)
{
p=m;
printf("%d ",p);
}
}
printf("\n");
printf("所有四位水仙花数为:\n");
for(m=1000;m<=9999;m++)
{
a=(int)(m/1000);
b=(int)((m-1000*a)/100);
c=(int)((m-(1000*a+100*b))/10);
d=(int)(m-(1000*a+100*b+10*c));
if(m==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
{
p=m;
printf("%d ",p);
}
}
printf("\n");
}
第3个回答  2019-01-30
#include<stdio.h>
void
main()
{
long
int
m,s,n;
/*定义长整形数字:m,s,n,m存放判断的数字,s存放各位数字之和,n存放中间数字*/
int
p;
/*定义整形数字,来存放每个位的数字*/
printf("请输入一个整数:");
scanf("%ld",&m);/*输入长整形数字*/
s=0;
/*赋予s值为0*/
p=m%10;
/*求得m的第一位数字,从各位开始*/
s+=p*p*p;
n=m/10;
/*把m数字的第一位去掉,直接除以10*/
while(n!=0)
/*当n不等于0时*/
{
p=n%10;
/*求的每一位数字*/
s+=p*p*p;
/*继续求和*/
n=n/10;
}
/*继续依次去掉每一位数字*/
if(s==m)
printf("是水仙花数\n");
/*最后,如果求得的和等于m,则为水仙花数*/
else
printf("不是水仙花数\n");
}
/*
PS:上述代码,是输入一个数字,判断是否是水仙花数,如果,想求其他的,可把上述代码移植到其他程序中。经测试,可以使用。*/
/*PS::::如还有不懂,可继续*/
第4个回答  2008-09-15
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main()
{
int i, a, b, c, d, sum;

for(i = 100; i < 10000; i++)
{
a = i % 10;
b = i / 10 % 10;
c = i / 100 % 10;
d = i / 1000 % 10;
if(d)
sum = pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4);
else
sum = pow(a,3)+pow(b,3)+pow(c,3);
if(sum == i)
printf("%d\n", i);
}
system("PAUSE");
return 0;
}
相似回答