go语言水仙花数 C语言判断水仙花数

c语言 水仙花数

我前几天回复了一个类似帖子,我写的程序上机测试通过,程序如下:

我们提供的服务有:网站建设、成都网站制作、微信公众号开发、网站优化、网站认证、陕州ssl等。为千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的陕州网站制作公司

#includestdio.h

int main()

{

int m,n,a,b,c,i=0;

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

while(m=n)

{

a=m/100;

b=(m-a*100)/10;

c=m-a*100-b*10;

if(a*a*a+b*b*b+c*c*c==m){i=i+1;printf("%d\n",m);}

m=m+1;

}

if(i==0) printf("no\n");

return 0;

}

帖子地址:

我用C语言编写了一个查找水仙花数并且把它存放在一个数组了,但是编译没有问题,跳不出循环,帮帮我

for循环中,i为循环计数,然而你在循环体中改变了i的值,所以i始终达不到退出循环的条件:in, 所以死循环了。

另外:

水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。

所以要从100到999,如果是4位数,则每位上的数要4次方

#include stdio.h

#include math.h

#define MAX 100

int judge(int a[],int n ,int M)

{

int i , j = 0 , digit ;

int sum = 0 ;

for (i = 100 ; i = n ; i++)

{

sum=0;

int t=i;

while(t0)

{

digit=t%10;

sum=digit*digit*digit+sum;

t=t/10;

}

if(sum==i)

{

a[j++]=i;

}

/* while ( i  0 )

{

digit = i % 10 ;

sum = sum +pow(digit,3) ;

i = i /10 ;

}

if ( sum == temp)

{

a[j++] = i ;

}*/

}

printf("\nj=%d\n",j);

return j ;

}

int main ( void )

{

int n ,i; 

int m ;

int a[MAX];

printf("Input the n (100=n=10000) : ");

scanf("%d",n);

if(n100 || n10000)

{

printf("\ninput error");

return 1;

}

m =judge(a,n,MAX);

for ( i = 0 ; i  m ;i++){

printf("%d ",a[i]);

}

return 0 ;

}

水仙花数C语言程序

提示错误可以调试为:

#include stdio.h

int main()

{

int a, b, c, d;

for (a = 100; a 1000; a++)

{

b = a / 100;

c = a % 100 / 10;

d = a % 100 % 10;

if (b*b*b + c*c*c + d*d*d == a)

printf("水仙花数为%d\n", a);

}

}

如图为运行结果

原先的错误在于#include后没有加stdio.h,而且for循环语句也有错误。

编程 求水仙花数

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)

C语言代码

#include stdio.h 

#include stdlib.h

void main() 

int i,j,k,n; 

printf("'water flower'number is:"); 

for(n=100;n10000;n++) 

i=n/100;/*分解出百位*/ 

j=n/10%10;/*分解出十位*/ 

k=n%10;/*分解出个位*/ 

if(n==i*i*i+j*j*j+k*k*k) 

printf("%-5d",n); 

printf("\n"); 

}

3.  C++代码

#includeiostream

using namespace std;

int f(int x)

{int y=1;

for(int i=1;i=3;i++)

y=y*x;

return y;}

int main()

{

for(int i=100;i=999;i++)

{if(f(i%10)+f(i/10%10)+f(i/100%10)==i)

coutiendl;}

return 0;

}

水仙花数的意思是什么?

一、水仙花数(Narcissistic

number)也被称为超完全数字不变数(pluperfect

digital

invariant,

PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong

number),水仙花数是指一个

3

位数,它的每个位上的数字的

3次幂之和等于它本身(例如:1^3

+

5^3+

3^3

=

153)。

二、例题:求取100至100,000以内的所有水仙花数。

思路分析:

1、总体框架 

用for遍历指定区间,判定当前循环变量【i】是否为水仙花数:是,则输出到控制台;问题细化为:判定某自然数【i】是否为水仙花数,具体过程由步骤2给出。

2、子框架:判定过程 

大致分两步进行:

2.1、准备参数 

根据【i】,算得【i】的总位数D(digit);【i】中各位数的D次幂的和sum;

2.2、判定结果

比较sum和【i】值的大小,结果传给【步骤1】;

此时问题进一步细化为:计算总位数D和各位数的D次幂之和sum,具体结果分别由【步骤3】、【步骤4】给出;

3、D的计算

用10累除n,其商截尾取整:n/=10,再放入while语句,统计商变为0时的总累除次数,该次数+1即为D;

4、sum的计算 

根据定义,只需利用for循环获取自然数n的各位数的值,在用sum累加各位数的D次幂即可。

具体代码:

运行结果:

扩展资料:

关于c语言水仙花数编程分析举例

1、问题描述

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

=

13 +

53 +

33。

2、问题分析

根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等,

三位数为“水仙花数”,反之,则不是。

3、算法设计

“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是

100〜999。对应的循环条件如下:

4、对代码的说明:

将n整除以100,得出n在百位上的数字hun;将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位上的数字ten;将n对10取余,得出n在个位上的数字ind;求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。

对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。

下面是完整的代码:

运行结果:

result

is:153

370

371

407

参考资料:搜狗百科-水仙花数


当前名称:go语言水仙花数 C语言判断水仙花数
当前网址:http://scyanting.com/article/dodhpos.html