#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