为什么我的代码输出是空白的?

神秘的三位数 有这样一个3位数,组成它的3个数字阶乘之和正好等于它本身。

即:abc = a! + b! + c!

现在要求100到5000之间的神秘数

#include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
int func(int a,long long int sum);//求3!+2!+1!
int jieji(long long int n);//求3! 2! 1!
int main()
{
	for(int a=100;a<=5000;a++)//循环开始 
	{
		long long int sum=0;
		func(a,sum);
		if(sum==a) cout<<a<<endl;//判断是否相等 
		else continue;	//不相等就执行下一个 
	}
	return 0;
}
int func(int a,long long int sum)//阶层 
{
	long long int i=1,gew[100];
    while(a!=0)//分层 
	{
		gew[i]=a%10;//3 2 1
		sum=sum+jieji(gew[i]);//3!+2!+1!
		i++;
		a=a/10;
	} 
	return sum;
}
int jieji(long long int n)//阶层 计算3! 2! 1!
{
	long long int s=1;
	if(n==0) return 0;
	for(int j=1;j<=n;j++)
	{
		s=s*j;
	}
	return s;
}

 

你这个sum一直等于0

12行添加sum=

也可以改成引用传递,func的参数sum改为引用。

#include<stdio.h>
#include<iostream>
#include<cstring>

#if 0
using namespace std;
int get_factorial(int n)
{
    int i, sum = 1;

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

    return sum;
}

int check_special_num(int n)
{
    int sum = 0;
    int tmp = n;

    while (tmp) {
        sum += get_factorial(tmp % 10);
        tmp /= 10;
    }
    if (sum == n)
        return 1;

    return 0;
}

int main(void)
{
    int i;

    for (i = 100; i < 1000; i++)
        if (check_special_num(i))
            cout<<i<<endl;

    return 0;
}
#endif
#if 1

using namespace std;

int func(int a,long long int sum);//求3!+2!+1!

int jieji(long long int n);//求3! 2! 1!

int main()

{

    //for(int a=100;a<=5000;a++)//循环开始  /*既然是三位数,把循环条件定义的更精确一些*/
    for(int a=100;a<1000;a++)//循环开始
    {

        long long int sum=0;

        if (func(a, sum) == a)//;

        /*if(sum==a) */cout<<a<<endl;//判断是否相等

        ///else continue;	//不相等就执行下一个, 代码冗余

    }

    return 0;

}

int func(int a,long long int sum)//阶层

{

    long long int i=1,gew[100];

    while(a!=0)//分层

    {

        gew[i]=a%10;//3 2 1

        sum= sum+jieji(gew[i]);//3!+2!+1!

        i++;

        a=a/10;

    }

    return sum;

}

int jieji(long long int n)//阶层 计算3! 2! 1!

{

    long long int s=1;

    if(n==0) return 0;

    for(int j=1;j<=n;j++)

    {

        s=s*j;

    }

    return s;       //返回long long int,而返回类型是int,因此数据长度会被截断

}
#endif

三个9的阶乘之和也不会大于int的取值范围,因此用不上long long int,对于要求的三位数,也用不上申请100长度的数组;

供参考,上面的是个人写的,可以参考一下~

#include <iostream>
using namespace std;

//阶乘之和最大5000,int类型足矣
int func(int a); //返回3!+2!+1!的和

int jieji(int n); //返回阶乘,求3! 2! 1!

int main()
{
    for (int a = 100; a <= 5000; a++) //循环开始
    {
        if (func(a) == a) //判断是否相等
            cout << a << endl;
        //else
        //    continue; //不相等就执行下一个
    }

    return 0;
}

int func(int a) //阶层
{
    int sum = 0;
    int n, t;
    while (a != 0) //分层
    {
        n = a % 10;
        t = jieji(n);
        sum += t; //3!+2!+1!
        a /= 10;
    }

    return sum;
}

int jieji(int n) //阶层 计算3! 2! 1!
{
    //改用递归算阶乘
    if (n == 0) 
        return 1;   //0!= 1

    return n * jieji(n - 1);
}