大佬们能帮看一下哪里错了么?水仙花C

 #include<stdio.h>
#include<math.h>
int main()
{
        int N,j,a,b,sum=0;
        scanf("%d",&N);
        int first;
        first=pow(10,(N-1));
        int i=first;
        
        for(;i<10*first;i++){
            int t=i;
            do{
                a=t%10;
                t/=10;
                b=pow(a,N);
                sum+=b;
            }while(t>0);
            if(sum==i){
                printf("%d\n",i);
            }
        }
        return 0;

#include<stdio.h>
#include<math.h>
int main()
{
        int N,j,a,b,sum=0;
        scanf("%d",&N);
        int first;
        first=pow(10,(N-1));
        int i=first;
        
        for(;i<10*first;i++){
            int t=i;
            sum=0;  //每次计算各位之和前sum要重新设置为0
            do{
                a=t%10;
                t/=10;
                b=pow(a,N);
                sum+=b;
            }while(t>0);
            if(sum==i){
                printf("%d\n",i);
            }
        }
        return 0;
} 

 

如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮
 

sum值没有清零,导致一直累加,所以不会等于i

在int t=i;后,增加sum=0;

 #include<stdio.h>
#include<math.h>
int main()
{
        int N,j,a,b,sum=0;
        scanf("%d",&N);
        int first;
        first=pow(10,(N-1));
        int i=first;
        
        for(;i<10*first;i++){
            int t=i;
            sum = 0;
            do{
                a=t%10;
                t/=10;
                b=pow(a,N);
                sum+=b;
            }while(t>0);
            if(sum==i){
                printf("%d\n",i);
            }
        }
        return 0;
} 

 

代码如下


#include<stdio.h>						//编译预处理命令

int mypow (int x, int n);				//声明自己的幂函数

int main (int agrc, char const *agrv[])	//主函数
{
	int n, start, end, temp, sum;		//变量定义

	scanf("%d", &n);					//输入正整数
	start = mypow(10, n-1);				//计算最小的n位正整数
	end = start*10 - 1;					//计算最大的n位正整数

	for ( ; start < end; start++)		//遍历所有的n位正整数
	{
		temp = start;
		sum = 0;
		while(temp)
		{
			sum += mypow(temp%10, n);	//计算其各位数的n次方之和
			temp /= 10;
		}
		if (sum == start)
           	printf("%d\n", start);		//如果满足各位数的n次方之和等于其本身,就输出该水仙花数
	}
	return 0;
}

int mypow (int x, int n)				//定义自己的幂函数
{
	int ret;
	
	ret = 1;							//ret的初始值必须设为1否则会出错
	while(n--)							//当n等于0时,循环停止
		ret *= x;
		
	return ret;
}

运行截图

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632