PTA5-6 水仙花数 (C语言)

水仙花数

  • 说明
  • 要求
  • 程序(C语言)
  • 心得

说明

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:
153 = 1 2 + 5 2 + 3 2 153=1^2+5^2+3^2 153=12+52+32。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

要求

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000

程序(C语言)

#include 
#include
int narcissistic(int number);
void PrintN(int m, int n);

int main()
{
	int m, n;

	scanf_s("%d%d", &m, &n);
	if (narcissistic(m)) printf("%d is a narcissistic number\n", m); //判断上边界
	PrintN(m, n);
	if (narcissistic(n)) printf("%d is a narcissistic number\n", n);  //判断下边界

	return 0;
}
int narcissistic(int number) {
	int sum = 0, i = 0, r = 0, number2 = number,count=0;
	int a[10];
	if (number >= 100 && number <= 10000) {
		do {
			number /= 10;
			count++;
		} while (number > 0);  /*计算数字的位数*/
		number = number2;
		do {
			a[i] = number % 10;
			sum += pow(a[i], count);
			number /= 10;
			i++;
		} while (number > 0);
	}
	if (sum == number2)
		r = 1;
	return r;
}
void PrintN(int m, int n)
{
	int i, j = 0, number = 0, sum = 0, count = 0;
	int a[10];
	if (m < 100) m = 100;
	if (m > 10000) n = 10000;
	if (m<=n) {
		for (i = m+1; i <= n-1; i++) {
			number = i;
			count = 0;
			do {
				number /= 10;
				count++;
			} while (number > 0);
			number = i;
			sum = 0;
			j = 0;   /*循环嵌套一定要注意外层变量可能需要归零*/
			do {
				a[j] = number % 10;
				sum += pow(a[j], count);
				number /= 10;
				j++;
			} while (number > 0);
			if (sum == i)
				printf("%d\n", i);
		}
	}
}


心得

在使用循环时候,要注意是否变量需要归零。

你可能感兴趣的:(C语言练习题)