我前几天回复了一个类似帖子,我写的程序上机测试通过,程序如下:
我们提供的服务有:网站建设、成都网站制作、微信公众号开发、网站优化、网站认证、陕州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;
}
帖子地址:
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 ;
}
提示错误可以调试为:
#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
参考资料:搜狗百科-水仙花数