1、简单的思维问题 各个位上阶乘的和 要和这个数相匹配 这样才能得到正确的解。各个位上阶乘的和 是最大是9*9!这样来求解。999999999 9个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 ", i); } } }