c语言 求所有的水仙花数 为什么vc6++运行这个程序时会弹出停止运行的对话框。。。
#include<stdio.h>intnum(intn){inti,m=0;for(i=1;;i=i*10){if(n/i!=0)m=m+1;elsebreak;}re...
#include<stdio.h>
int num(int n)
{
int i,m=0;
for(i=1;;i=i*10)
{
if(n/i!=0)
m=m+1;
else
break;
}
return m;
} //这个函数是用来求一个正整数的位数
void g( )
{
int num(int a);
int a,m,i,c,d=0,e=1;
for(a=100;a<=32000;a++)
{
m=num(a);
for(i=1;i<=m;i++)
{c=(a/e)%10;
d=d+c*c*c;
e=10*e;
}
if (d==a)
printf("%d",a);
}
}
int main(int argc, char* argv[])
{
void g( );
g();
return 0;
} 展开
int num(int n)
{
int i,m=0;
for(i=1;;i=i*10)
{
if(n/i!=0)
m=m+1;
else
break;
}
return m;
} //这个函数是用来求一个正整数的位数
void g( )
{
int num(int a);
int a,m,i,c,d=0,e=1;
for(a=100;a<=32000;a++)
{
m=num(a);
for(i=1;i<=m;i++)
{c=(a/e)%10;
d=d+c*c*c;
e=10*e;
}
if (d==a)
printf("%d",a);
}
}
int main(int argc, char* argv[])
{
void g( );
g();
return 0;
} 展开
4个回答
展开全部
你的d和e的值没有从新归还,d和e的值会越来越大后来就会出错了,你的for没运行一次就要还原
for(a=100;a<=32000;a++)
{
m=num(a);
for(i=1;i<=m;i++)
{c=(a/e)%10;
d=d+c*c*c;
e=10*e;
}
if (d==a)
printf("%d",a);
d=0;e=1; //加上就好了
}
for(a=100;a<=32000;a++)
{
m=num(a);
for(i=1;i<=m;i++)
{c=(a/e)%10;
d=d+c*c*c;
e=10*e;
}
if (d==a)
printf("%d",a);
d=0;e=1; //加上就好了
}
追问
再问个问题:为什么我a的范围是100到32000,但是这个程序只能打印出3位数的水仙花数??即只能打印出153、370、371、407这四个水仙花数。。。。???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int num(int n)
{
int i,m=0;
for(i=1;;i=i*10)
{
if(n/i!=0)
m=m+1;
else
break;
}
return m;
} //这个函数是用来求一个正整数的位数
void g( )
{
int num(int a);
int a,m,i,c,d,e;
for(a=100;a<=32000;a++)
{
m=num(a);
d=0; //d的初始化放在这儿。
e=1; //e的初始化放在这儿。
for(i=1;i<=m;i++)
{c=(a/e)%10;
d=d+c*c*c;
e=10*e;
}
if (d==a)
printf("%d ",a);
}
}
int main(int argc, char* argv[])
{
void g( );
g();
return 0;
}
int num(int n)
{
int i,m=0;
for(i=1;;i=i*10)
{
if(n/i!=0)
m=m+1;
else
break;
}
return m;
} //这个函数是用来求一个正整数的位数
void g( )
{
int num(int a);
int a,m,i,c,d,e;
for(a=100;a<=32000;a++)
{
m=num(a);
d=0; //d的初始化放在这儿。
e=1; //e的初始化放在这儿。
for(i=1;i<=m;i++)
{c=(a/e)%10;
d=d+c*c*c;
e=10*e;
}
if (d==a)
printf("%d ",a);
}
}
int main(int argc, char* argv[])
{
void g( );
g();
return 0;
}
追问
再问个问题:为什么我a的范围是100到32000,但是这个程序只能打印出3位数的水仙花数??即只能打印出153、370、371、407这四个水仙花数。。。。???
追答
因为四位数,五位数的符合条件的没有。程序中设定的条件是:这个数等于组成这个数的各位立方和,叫水仙花数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,我看得有点繁多,下面这个怎样呢:
#include "stdio.h"
int main(void)
{
int i, digit, m, n, number, sum;
int repeat, ri;
scanf_s("%d",&repeat);
for(ri = 1; ri <= repeat; ri++){
scanf_s("%d%d", &m, &n);
printf("result:\n");
for(i=m;i<=n; i++){
sum=0;
number=i;
while (number){
digit =number %10;
sum =sum +digit *digit *digit ;
number = number /10;
}
if(i==sum)
printf("水仙花数为:%d\n",i );
}
}
}
#include "stdio.h"
int main(void)
{
int i, digit, m, n, number, sum;
int repeat, ri;
scanf_s("%d",&repeat);
for(ri = 1; ri <= repeat; ri++){
scanf_s("%d%d", &m, &n);
printf("result:\n");
for(i=m;i<=n; i++){
sum=0;
number=i;
while (number){
digit =number %10;
sum =sum +digit *digit *digit ;
number = number /10;
}
if(i==sum)
printf("水仙花数为:%d\n",i );
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把题目的具体要求和内容发下啊,你这个程序看起来就郁闷。
追问
题目就是:写一个判别水仙花数的函数,求出所有的水仙花数。
我已经能写出判别水仙花数的函数了,就是写不出来求所有水仙花数的函数。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询