做判断一个数是否为水仙花数的练习,如153为三位数,153=1^3+5^3+3^3则该数为水仙花数,但是程序运行总出错。

问题遇到的现象和发生背景

做判断一个数是否为水仙花数的练习,如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;
}

没看出你的思路,能说说吗,好帮你分析哪一步出现问题了