这个用c语言怎么写,希望不要用数组,我刚学没多久,不太懂!
问题描述:
水仙花数是指一个N位正整数(N3),它的每个位上的数字的N次幕之和等于它本身。例如:153=13+5+。本题要求编写程序,计算
听有N位水仙花数
输入格式:
输入在一行中给出一个正整数N(3N7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行
输入样例:
3
①结尾无空行
输出样例:
153
370
371
407
①结尾无空行
答
你好,我尝试了一下,没有解决结尾无空行的问题,下面是我的代码,欢迎指正
#include<stdio.h>
#include<math.h>
int main(){
int N,a,b;
while(scanf("%d",&N),N<3||N>7);
a=pow(10,N-1);
b=pow(10,N);
while(a<b){//由a到b穷举
int sum=0,k;
k=a;//把a赋值给k,用k进行逐位拆分操作
while(k){//拆分k,累加每位的N次幂
sum+=pow(k%10,N);
k/=10;
}
if(sum==a) printf("%d\n",a); //重组后新数等于原数,输出
a++;
}
}
运行结果:
答
解决结尾无空行的修改,供参考:
#include<stdio.h>
#include<math.h>
int main() {
int N, a, b, flg = 0;//修改
while (scanf("%d", &N), N < 3 || N>7);
a = pow(10, N - 1);
b = pow(10, N);
while (a < b) {//由a到b穷举
int sum = 0, k;
k = a;//把a赋值给k,用k进行逐位拆分操作
while (k) {//拆分k,累加每位的N次幂
sum += pow(k % 10, N);
k /= 10;
}
if (sum == a)
printf(flg++ == 0 ? "%d" : "\n%d", a); //解决结尾无空行
a++;
}
}