C语言 指定数量级内的水仙花数是(输入5 输出所有5位数的水仙花数)

195 阅读1分钟

输入 3

输出 153 370 371 407

输入 5

输出 54748 92727 93084

#include <stdio.h>
#include <math.h>

int main() {
	int n;
	scanf("%d", &n);//输入你想得到n位数中的水仙花数

	int i;//循环变量
	int first = 1;
	int final;//记录一个初始的n位数

	for (i = 1; i < n; i++) {
		first *= 10;
	}//得到一个x位数以1开头后面n-1个0
	int number = first;//让number去进行不断的遍历 从first到first*10
	//不断让number++,如果n=5.那么就是从10000一直遍历到100000
	while ( number < first * 10) {
		final = number;//final代替number 进入水仙花判读循环
		//判断是否水仙花数
		int sum = 0;//水仙花数判断
		while (final > 0) {
			int m ;
			int z;
			m = final % 10;
			z = pow(m, n);
			sum += z;
			final /= 10;
 		}
                //判断和输出
		if (sum == number) {
			printf("%d ", number);
		}
		sum = 0;
		number++;
	}
	return 0;
}

缺点是需要遍历所有的范围数字,比较费时