c语言 编写一个判断是不是为水仙花数的函数,并通过调用该函数打印输出所有水仙花数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 编写一个判断是不是为水仙花数的函数,并通过调用该函数打印输出所有水仙花数。相关的知识,希望对你有一定的参考价值。

要调用函数的。

#include<stdio.h>

#include<math.h>

int narcissistic(int number);

void PrintN(int m,int n);

int main()

int m,n;

scanf("%d%d",&m,&n);

if(narcissistic(m))printf("%d is a narcissistic number\\n",m);

PrintN(m,n);

if(narcissistic(n))printf("%d is a narcissistic number\\n",n);

return 0;

int narcissistic(int number)

int i,n=0,sum=0,cnt=0;

n=number;

while(n)

cnt++;

n/=10;

n=number;

while(n)

i=n%10;

sum+=(int)pow(i,cnt);

n/=10;

if(sum==number)

return 1;

else

return 0;

void PrintN(int m,int n)

int i;

for(i=m+1;i<n;i++)

if(narcissistic(i))

printf("%d\\n",i);

扩展资料:

printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--&gt,m域宽,打印出来以后,在控制台上,显示m位;

如果要打印的数的位数如果超过我们设定m则原样输出;

如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

参考资料:

百度百科——水仙花数

参考技术A

水仙花数即三位的自幂数。所谓自幂数,就是指一个 n 位数 ( n≥3 ),其每位上的数字的 n 次幂之和等于本身。

所以水仙花数,首先是三位数,形式为abc,同时a,b,c的立方和值与原本数相同。

类似的还有

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

等等。


对于水仙花数的判断,需要按照以下步骤:

1 提取该数的个位,十位,百位值。

2 计算三个数的立方和。

3 与原值比较,如相等则是。


要输出所有水仙花数,需要:

1 对所有三位数,即100到999遍历;

2 对每个数判断是否为水仙花数,如是则退出。

当循环结束,所有的水仙花数就输出成功了。

代码如下:

int isNarcissistic(int n)

    int a = n/100;
    int b = n/10%10;
    int c = n%10;
    return a*a*a + b*b*b + c*c*c == n;


int main()

    int i;
    for(i = 100; i< 1000; i ++)
        if(isNarcissistic(i)) printf("%d ",i);


输出结果如下:

153 370 371 407

参考技术B 你是要这个吗? 百度百科上有的
C 语言的"水仙花数"实现代码:  #include <stdio.h>
#include<math.h>
int main (void)
long n,p;
long c,a,j,s[30],i,q;
p=0;
a=10;
scanf("%ld",&n);
q=n;
for (i=1;c>10 ;++i)
c=n/a;
a=a*10;
printf("i=%ld,a=%ld \n",i,a);
for (j=1;a>=10 ;++j)
s[j]=n/(a/10);
n=n-s[j]*(a/10);
a=a/10;
printf("j=%ld,a=%ld\n",j,a);

for (j=1;j<=i ;j++)
p+=pow(s[j],i);
printf("p=%ld,i=%ld\n",p,i);

if (p==q)
printf("%ld 为水仙花数",q);
else
printf("%ld 该数不是水仙花数",q);

return 0;

参考资料:http://baike.baidu.com/view/152077.htm

本回答被提问者和网友采纳

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语言:遍历水仙花数n,判断是不是为素数,并返回结果。

C语言 水仙花数 编程题

c语言中,如何输出所有的水仙花数

如何用c语言编程判断一个数是否素数?

c语言程序:编写函数,判断一个正整数是不是为完全平方数,并输出100以内的完全平方数。

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