c语言编程调用函数求水仙花数
答案:3 信息版本:手机版
解决时间 2019-10-05 09:03
已解决
2019-10-04 17:32
这是一个调用函数求100到999的水仙花数,没有错,但就是运行不出结果,求大师帮我解答,好苦恼。。。
最佳答案
2019-10-04 18:27
水仙花数是指一个 n 位数 ( n≥3 ),每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。
所以可以依次通过模除求得每个位上的值,然后做n次幂后相加,再判断是否与本身相等,从而得到是否为水仙花数的结论。
以求所有三位数水仙花数为例,代码如下,其它相似。
#include
#include
#include
int cube(const int n){//计算立方。如果是四位则是四次方,以此类推。
return n*n*n;
}
int isNarcissistic(const int n){//计算是否为水仙花数。
int hundreds=n/100;//百位
int tens=n/10-hundreds*10;//十位
int ones=n%10;//个位
return cube(hundreds)+cube(tens)+cube(ones)==n;//如果相等,则为水仙花数。
}
int main(void){
int i;
for(i=100;i<1000;++i){//对所有三位数判断。
if(isNarcissistic(i))//如果是则输出。
printf("%d\n",i);
}
return 0;
}
全部回答
1楼
2019-10-04 19:09
程序错了几个地方:
1. scanf 的参数必须是地址。a 的前面要加 & 号。
2. 计算 b = 百位; c = 十位; d = 个位; 的方法错了。
3. 比较是 ==。如果用了 =,就会变成赋值,if 的条件就会算错了。
可是刚好这几个错误,编译器都不会报错。
更改以后如以下程序:
#include
void main()
{
int a,b,c,d; scanf("%d",&a);
b=a/100;
c=a/10%10;
d=a%10; if (a==b*b*b+c*c*c+d*d*d) printf("%d是一个水仙花数",a);
}
2楼
2019-10-04 18:40
你缺少大括号,把for后面的包括所有if部分都扩起来,表示一个语句块,才能得到正确的结果
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯