hdu 2212

1简单的思维问题 各个位上阶乘的和 要和这个数相匹配 这样才能得到正确的解。各个位上阶乘的和 是最大是9*9!这样来求解。999999999   9最大的各个位上的阶乘的和为3265920=9*9

只需要遍历到上面这个数就可以了,不用遍历到21亿,否则会超时

只有四个数满足条件(此题为水题)

 

 

#include<stdio.h>

int a[11];

int fun(int n)  //1-9的阶乘存起来

		{

	int i;

	int sum = 1;

	for (i = 1; i <= n; i++)

		sum *= i;

	return sum;



}



int main() {

	a[0] = 1;  //0!,0的阶乘是1

	int i, num, ji, sum;



	for (i = 1; i <= 9; i++) {

		a[i] = fun(i);  //a[]用于保存各个自然数的阶乘

	}



	//直接进行遍历

	//3265920是9个9!

	for (i = 1; i <= 3265920; i++) {

		num = i;

		sum = 0;

		while (num) {

			ji = num % 10;//去末位的数字

			sum += a[ji];

			num /= 10;//取下一位的数字

		}

		if (i == sum) {

			printf("%d\n", i);

		}

	}

}


 

 

你可能感兴趣的:(HDU)