一道谜题

在观看《美丽的数学》一书中,在120页中有一道谜题:

数字145被称为一个阶乘和数, 因为它具有以下有趣的属性,如果我们将它的各位数字的阶乘相加,会得到该数字本身

1! +4! +5!  = 1 + 24 + 120  = 145

数字1和2也是阶乘和数,但0不是。还剩下唯一的一个阶乘和数。看看你能不能找到它!

如果不编写计算机程序,答案很难得出: 所以,我们就通过C#来编写代码实现它.

实现代码

在这个问题上,主要的思路为:

1) 0的阶乘为1 . 即 0! = 1

2)   从数字1开始无限循环。并把 Int 转换为 Char Array,这样即可以把数字 123 拆分为 1, 2, 3.

3) 循环 Char Array数字,单独计算每一个数字的阶乘。因为计算最大数是9的阶乘,很简单,所以用一个for循环即可,无需引入数学计算类。

4)   把各部分的输出记录,并打印。

5) 当找到第四个数后,无限循环终止。

因为自己对C# 代码熟悉,所以就使用C# 实现:

        static async Task Main(string[] args)
{
Console.WriteLine("=============S==T==A==R==T============="); int n = 1;
int order = 0;
int finalNumber = 0;
char[] subn;
string rformat1, rformat2; while (true)
{
rformat1 = "";
rformat2 = "";
finalNumber = 0;
subn = n.ToString().ToCharArray(); //通过ToCharAarrary函数来拆分数字的位数。如 123 拆分为 1, 2,3. foreach (var s in subn)
{
int temp = countN(s);
finalNumber += temp; rformat1 += s.ToString() + "! +";
rformat2 += temp.ToString() + " +";
} if (n == finalNumber)
{
order++;
Console.WriteLine("== Find == :: " + rformat1.TrimEnd('+') + " = " + rformat2.TrimEnd('+') + " = " + finalNumber.ToString() + " == ");
}
//Console.WriteLine("== " + n.ToString() + " == ");
n++; if (order == 4)
break;
}
Console.WriteLine("============= ==E==N==D== =============");
Console.ReadKey();
} static int countN(char n)
{
int startNumber = Convert.ToInt32(n.ToString());
if (startNumber == 0) return 1;//0! = 1 即0的阶乘为1.
int result = 1;
for (int i = startNumber; i > 0; i--)
{
result *= i;
}
return result;
}

运行结果如下:

=============S==T==A==R==T=============
== Find == :: 1! = 1 = 1 ==
== Find == :: 2! = 2 = 2 ==
== Find == :: 1! +4! +5! = 1 + 24 + 120 = 145 ==
== Find == :: 4! +0! +5! +8! +5! = 24 + 1 + 120 + 40320 + 120 = 40585 ==
============= ==E==N==D== =============

所以,我们找到的第四个阶乘和数为: 40585

运行动画

【Azure Developer】解答《美丽的数学》一书中P120页的一道谜题:寻找第四个阶乘和数的更多相关文章

  1. 【Azure Developer】使用 CURL 获取 Key Vault 中 Secrets 中的值

    问题描述 在使用CURL通过REST API获取Azure Key Vaualt的Secrets值,提示Missing Token, 问如何来生成正确的Token呢? # curl 命令 curl - ...

  2. 5 TensorFlow实战Google深度学习框架一书中的错误两处(交叉熵定义有误)

    第一处: 书中62页定义的交叉熵函数定义有误,虽然这个所谓交叉熵的数值能够减少,但是是不能提升预测性能的,因为定义就错了. 我已经将预测过程可视化,直接将交叉熵改为我的,或者用原书的,就可以看到预测结 ...

  3. 【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()

    问题描述 算法 Algorithms (第四版)书中,第1章:基础编程模型第15题: 结果: 编写一个静态方法 histogram(), 接受一个整型数组a[] 和一个整数M为参数,并返回一个大小为M ...

  4. 【Azure Developer】解决Azure Key Vault管理Storage的示例代码在中国区Azure遇见的各种认证/授权问题 - C# Example Code

    问题描述 使用Azure密钥保管库(Key Vault)来托管存储账号(Storage Account)密钥的示例中,从Github中下载的示例代码在中国区Azure运行时候会遇见各种认证和授权问题, ...

  5. 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

    问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...

  6. 【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 获取Azure AD的Access Token的两种方式

    问题描述 使用Python代码,展示如何从Azure AD 中获取目标资源的 Access Token. 如要了解如何从AAD中获取 client id,client secret,tenant id ...

  7. 【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)

    问题描述 在上一篇博文<[Azure Developer]使用 adal4j(Azure Active Directory authentication library for Java)如何来 ...

  8. 【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息

    问题描述 创建一个Java Console程序,用于使用Azure Key Vault Secret.在VS Code中能正常Debug,但是通过mvn clean package打包为jar文件后, ...

  9. 【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image

    问题描述 使用Github Action,通过 Azure/functions-container-action@v1 插件来完成 yaml 文件的配置,并成功部署Function Image 的过程 ...

  10. 《Unity3D 实战核心技术详解》书中关于矩阵的错误

    最近一直在学习实时渲染,不免要接触线性代数.而渲染中,一定会用到矩阵,当我再次去复习我之前看的书时,发现<Unity3D 实战核心技术详解>关于矩阵就有几处错误 ,特标注出来. 书的第一章 ...

随机推荐

  1. 【K哥爬虫普法】辛苦钱被中间商抽走八成,还因此锒铛入狱

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  2. 基于OpenIM 实现聊天机器人功能

    ### 简要描述 使用 OpenIM 中的 Webhook 机制实现聊天机器人功能.发送文本消息或图片消息给聊天机器人后,机器人会返回相同的消息.开发者可以替换此逻辑,在LangChain框架上调用L ...

  3. vim 从嫌弃到依赖(0)——概述

    最近我想开一个新的系列,记录我使用vim的相关心得.初次接触vim是在大学操作系统实践课程中,跟着Linux一块进行学习的.当初我是百般嫌弃它的,想要进行编辑还要按下其他键,我想要移动光标居然还的切换 ...

  4. 微信小程序-页面生命周期方法

    在经过上一篇文章的介绍之后,我们知道了大体的生命周期在什么时候执行,这次主要是以代码的形式来展示一下具体的阶段执行什么生命周期方法. 首先我们编写一个代码可以从首页跳转到日志页面: <!--in ...

  5. 第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023)

    第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023) ​ 大会官网:http://www.caibda.org/ 大会时间:2023年6月16-18日 大会地点:中国郑州 截稿日期:2 ...

  6. 领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

    领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统 本项目主要实现了疾病自诊和医生推荐两个功能并构建了医生服务指标评价体系.疾病自诊主要通 ...

  7. MySQL常用操作指令大全

    前言: 一.基础概念 二.子句顺序 三.使用MySQL(USE.SHOW) 四.检索数据(SELECT) 五.排序检索数据(ORDER BY) 六.过滤数据(WHERE) 七.数据过滤(AND.OR. ...

  8. 驱动开发:内核封装TDI网络通信接口

    在上一篇文章<驱动开发:内核封装WSK网络通信接口>中,LyShark已经带大家看过了如何通过WSK接口实现套接字通信,但WSK实现的通信是内核与内核模块之间的,而如果需要内核与应用层之间 ...

  9. CF452F Permutation 与 P2757 [国家集训队] 等差子序列 题解

    两道基本一样的题: 题目链接: P2757 [国家集训队] 等差子序列 Permutation 链接:CF 或者 洛谷 等差子序列那题其实就是长度不小于 \(3\) 的等差数列是否存在,我们考虑等于 ...

  10. idea报错 Error running GctlBrpApplication. Command line is too long. Shorten the command line and rerun.解决方案

    idea新导入项目有时候会出现以下报错,解决方法如下: 一:报错截图,报错原因是命令行太长,让缩短命令长度再运行. 二:解决方法如下:在剪头标记位置加入代码: <property name=&q ...