C语言编程练习:水仙花数

文章目录


题目描述

水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 13+53+ 33。本题要求编写程序,计算所有N位水仙花数。

输入格式:
输入在一行中给出一个正整数N(3<=N<=7 )。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407


思路

首先需要读入一个数,保存在n中。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    
    
	int n;
	scanf("%d", &n);

	return 0;
}

既然要找出对应位数中的水仙花数,就需要对范围内的数进行遍历。对于三位数,遍历范围就是100 ~ 999,对于四位数,遍历范围就是1000 ~ 9999。我们写一个循环求出循环的起始点,循环的结束点就是 起始点*10-1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    
    
	int n;
	scanf("%d", &n);

	//计算遍历范围的起始点
	int first = 1;
	int i = 1;
	while (i < n) {
    
    
		first *= 10;
		i ++;
	}
	//遍历范围就是first到first-1
	i = first;
	while (i < first * 10) {
    
    
		i++;
	}

	return 0;
}

在遍历过程中,我们需要去分解这个数,因此使用个临时变量t去记录它。我们还需要一个变量临时sum来记录每位数n次幂的和。执行分解过程需要一个循环,在循环中每次让t%10得到最后一位数,同时让t除以10。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    
    
	int n;
	scanf("%d", &n);

	int first = 1;
	int i = 1;
	while (i < n) {
    
    
		first *= 10;
		i ++;
	}
	i = first;
	while (i < first * 10) {
    
    
		int t = i; //每次需要分解这个i,所以使用临时变量
		int sum = 0; //记录各个位上对应数的n次幂的和
		do {
    
    
			int d = t%10; //去当前数的最后位上的数字
			t/=10;    //除以10,去掉当前数的最后位上的数字
		}while(t>0);
		i++;
	}

	return 0;
}

在执行分解的循环中,还需要一个循环去求出t%10所得值得n次幂,并将结果加到sum中。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    
    
	int n;
	scanf("%d", &n);

	int first = 1;
	int i = 1;
	while (i < n) {
    
    
		first *= 10;
		i ++;
	}
	i = first;
	while (i < first * 10) {
    
    
		int t = i;
		int sum = 0;
		do {
    
    
			int d = t%10;
			t/=10;
			//计算一个数的n次幂
			int p = d;
			int j = 1;
			while (j < n) {
    
    
				p*=d;
				j++;
			}
			sum += p;
			
		}while(t>0);
	}

	return 0;
}

最后进行判断,当sum与n相等时,输出这个水仙花数。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    
    
	int n;
	scanf("%d", &n);

	int first = 1;
	int i = 1;
	while (i < n) {
    
    
		first *= 10;
		i ++;
	}
	i = first;
	while (i < first * 10) {
    
    
		int t = i;
		int sum = 0;
		do {
    
    
			int d = t%10;
			t/=10;
			int p = d;
			int j = 1;
			while (j < n) {
    
    
				p*=d;
				j++;
			}
			sum += p;
		}while(t>0);
		if (sum == i)
		{
    
    
			printf("%d\n", i);
		}
		i++;
	}

	return 0;
}

结果

运行,输入3,结果如下:
在这里插入图片描述

运行,输入4,结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/InnerPeaceHQ/article/details/121807619