C语言编程输出所有的“水仙花数”。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程输出所有的“水仙花数”。相关的知识,希望对你有一定的参考价值。

输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=1的立方+5的立方+3的立方。

1、首先需要打开Dev-c++软件,点击“新建源代码”。

2、然后按照如图所示填写代码。

3、其中:a表示的是水仙花数的百位数,b表示的是水仙花数的十位数,c表示的是水仙花数的个位数,sum表示的是所有累加下来的水仙花数。

4、if(sum==a*a*a+b*b*b+c*c*c)这一个程序步骤的作用是在规定查找的范围内找到符合这个条件的数。

5、注意a,b,c,sum的运算过程都是要在for 循环内完成,不可以在外循环进行。

6、而且还要注意区分在赋予百位数、十位数、个位数的计算用的“/","%”的区别,“/”表示除后取整数,“%”表示除后取余数。

7、最后点击“运行”即可得出要找的结果了。

参考技术A 运用VC++6.0编译运行:
#include <stdio.h>
int main()

int g,s,b;
for(int i=100;i<=999;i++)

b=i/100;
s=(i-b*100)/10;
g=i-b*100-s*10;
if(g*g*g+s*s*s+b*b*b==i)
printf("%d\n",i);

return 0;
参考技术B #include<stdio.h>
void main()

int i,j,k,s,t;
for(i=1;i<=9;i++)

for(j=0;j<=9;j++)

for(k=0;k<=9;k++)

s=i*i*i+j*j*j+k*k*k;
t=100*i+10*j+k;
if(s==t) printf("%4d",t);




我自己想的!呵呵,这是本人做出来的第一个C语言程序
参考技术C 最基本的方法是枚举法,但时间复杂度较高,不过剪枝后还可以,不慢。
当然也可以用贪心法解决
=======回答楼下朋友的问题===========
本人是学PASCAL的,对C语言不太熟悉,能读懂,但写还有点困难。见谅!
参考技术D main()

int ge,shi,bai,number; /*定义个位,十位,百位*/
for(number=100;number<1000;number++)

bai=number/100;
shi=(number%100)/10;
ge=number%10;
if(number==bai*bai*bai+shi*shi*shi+ge*ge*ge) /*若满足条件则显示*/
printf("\nnumber=%d\n",number);

getch();


楼上能把另外2种算法 仔细描述下么?谢谢本回答被提问者采纳

C语言 水仙花数 编程题

“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。现在要求输出所有在m和n范围内的水仙花数。
(100<=m<=n<=999)。
编程要求,要求编写一个判断水仙花数的函数,在主函数调用该函数判断某个数是否为水仙花数。

输入数据包括两个整数m和n

要求输出所有在给定范围内的水仙花数如果有多个,则要求在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;(注意:输出字母为小写)
-- -- - - 下面是我写的,检查了很久 不知道哪里错了 求指导!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int judge(int t)

int a,b,c;
a=t/100;
b=(t/10)%10;
c=t%10;
if (t==pow(a,3)+pow(b,3)+pow(c,3)) return 1;
else return 0;

int main()
int m,n,t,p,flag=0;
scanf("%d %d",&m,&n);
t=m;
if (t<=n) p=judge(t);
if(p==1)
printf("%d", t);
printf(" ");
flag=flag+1;
t=t+1;
else t=t+1;
else if(flag==0) printf("no\n");
else printf("\n");

return 0;

你没有循环啊.

if (t<=n)

for(; t<=n; t++)

p=judge(t);
if(p==1)

printf("%d", t);
printf(" ");
flag=flag+1;




else

if(flag==0) printf("no\\n");
else printf("\\n");

参考技术A

#include<stdio.h>
double myPow(double a,int x);//a的x次方。 
int daff(int a);//判断一个数是不是水仙花数。 

double myPow(double a,int x)

    double resu=1;
    int i=0;
    for(i=1;i<=x;i++)
    resu*=a;
    return resu;


int daff(int a) //返回1,表示是水仙花数。0表示不是。 

    int b=a;
    int flag=0;
    int num=0;
    int sum=0;
    while(b)
        
            num=b%10;
            sum+=myPow(num,3);
            b/=10;
        
    if(sum==a)
    flag=1;
    return flag;


int main ()

    int m=0,n=0;
    int i=0;
    int count=0;
    scanf("%d%d",&m,&n);//输入要求m<n. 
    for(i=m;i<=n;i++)
    if(daff(i))
        
            printf("%d ",i);
            count++;
        
    if(count==0)
        printf("no");
    return 0;

以上是关于C语言编程输出所有的“水仙花数”。的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎样编输出所有水仙花数范围100到999

C语言 水仙花数 编程题

水仙花数c语言

用c语言输出1000以内的水仙花数

C语言1~10000之间所有水仙花数

C-Free教程之C语言输出水仙花数的方法