做判断一个数是否为水仙花数的练习,如153为三位数,153=1^3+5^3+3^3则该数为水仙花数,但是程序运行总出错。
#include
int three(int k,int count);
int main()
{
int x;
int n=0;
int d=1;
int ret;
scanf("%d",&x);
int t=x;
int sum=0;
while(x>0){
n++;
x/=10;
d*=10;
}
d/=10;
while(d>0){
ret=x/d;
x%=d;
d/=10;
sum+=three(ret,n);
}
if(sum==t){
printf("%d是水仙花数");
}else printf("不是。");
return 0;
}
int three(int k,int count)
{
int i;
for(i=1;i<=count;i++) {
k*=k;
}
return k;
}
题主的代码问题出在int three(int ,int ) 函数里,求数 k 的几次方写得有问题,修改处见注释,供参考:
#include <stdio.h>
int three(int k, int count);
int main()
{
int x;
int n = 0;
int d = 1;
int ret;
scanf("%d", &x);
int t = x;
int sum = 0;
while (x > 0) {
n++;
x /= 10;
d *= 10;
}
d /= 10; x = t;//修改
while (d > 0) {
ret = x / d;
x %= d;
d /= 10;
sum += three(ret, n);
}
if (sum == t) {
printf("%d是水仙花数", t);//修改
}
else printf("不是。");
return 0;
}
int three(int k, int count)
{
int i, t; //修改
for (i = 1, t = 1; i <= count; i++) {
t *= k; //修改
}
return t; //修改
}
首先,你将一个输入的值赋给了x。然后在第一个while循环中,你对x进行操作直到x不大于0结束。看这代码,第一个循环结束后x=0.然后你在第二个循环中,将x/d的值作为参数传给函数,这个时候x/d=0,所以第二个循环中你一直将0作为第一个参数传给了函数。后面的代码没看了,应该也错了
你咋搞那么复杂:
#include<stdio.h>
int fun(int num) {
int a,b,c;
a=num/100;
b=num/10%10;
c=num%10;
if(a*a*a+b*b*b+c*c*c==num) {
return 1;
} else {
return 0;
}
}
int main() {
int num;
scanf("%d",&num);
if(fun(num))
printf("是");
else
printf("不是");
return 0;
}
没看出你的思路,能说说吗,好帮你分析哪一步出现问题了