一个编程题目,想了一晚上不知道错在哪里,求大佬指点!!!

题目:

一个正整数如果等于组成它的各位数字的阶乘之和,该整数称为阶乘和数。 
例如,145=1!+4!+5!,则145是一个三位阶乘和数。 
请输出所有阶乘数(不会超过十万)

 

小弟的代码:

#include <stdio.h>

int jc(int n){
    if(n == 1){
        return 1;
    }
    return jc(n - 1) * n;
}

int main(){
    int x, sum = 0, a;
    for(int j = 1; j <= 40485; j++){
        a = j;
        while(j != 0){
            x = j % 10;
            j /= 10;
            sum += jc(x);
        }
        j = a;
        if(sum == a){
            printf("%d ", j);
        }
    }
    return 0;

循环太多,系统卡死

#include <stdio.h>

int b[10] = {0, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};

int main(){
    int x, sum = 0, a;
    for(int j = 1; j <= 100000; j++){
        sum = 0; 
        a = j;
        while(j != 0){
            x = j % 10;
            j /= 10;
            sum += b[x];
        }
        j = a;
        if(sum == a){
            printf("%d ", j);
        }
    }
    return 0;

循环里套循环,尽量别有这样的代码