真是苺良鑫呀 2021-06-25 15:19 采纳率: 92.3%
浏览 98
已采纳

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

神秘的三位数 有这样一个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;
}
  • 写回答

4条回答 默认 最新

  • 梦335 2021-06-25 15:39
    关注

    你这个sum一直等于0

    12行添加sum=

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 正在学C++ 2021-06-25 15:41
    关注

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

    评论
  • 自信男孩 2021-06-25 15:54
    关注
    #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长度的数组;

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

    评论
  • 浪客 2021-06-25 15:59
    关注
    #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);
    }
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求可以批量下载懒人听书的软件,能登录自己帐号的。
  • ¥100 高博一起做RGB-D SLAM(5)VO无法出visualisation问题
  • ¥15 使用matlab进行手眼标定的仿真验证,得到齐次矩阵与opencv相差较大
  • ¥15 Python词频统计,运行出的Excel没有内容
  • ¥15 求推荐一个好用的录屏软件
  • ¥15 kali显示no x11 display variable was set;
  • ¥15 如何实现这个Python开发问题
  • ¥15 Erasure Code纠删码表
  • ¥15 用vite创建的vue3项目,404重定向不起作用??
  • ¥15 关于#c语言#的问题:一个球从80米高度自由落下,每次落地后反弹的高度为原高度的一半计算6次小球反弹的高度.(反弹结果取整,使用走走for循环结构)