一道谜题

在观看《美丽的数学》一书中,在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. iperf的学习与部分网络状况的简要总结

    背景 随着信息安全的越来越重要,公司要求进行数据备份. 部分客户现场交付之前需要进行性能压测,但是因为各种环境问题效果不是很理想. 前段时间疫情严重,经常需要居家办公,出现了很多网络相关的问题. 因为 ...

  2. vue数据更新后在视图上不响应

    一.vue如何追踪变化 当你把一个普通的JS对象传给vue实例的data选项时, vue将遍历此对象的所有属性, 并使用 Object.defineProperty 把这些属性全部转为 getter/ ...

  3. 【解决了一个小问题】terraform apply 的时候出现访问 localhost 出错

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 有这样一段 terraform 的部署脚本: provid ...

  4. 虚幻引擎 4 学习笔记 [1] :蓝图编程 Demo

    虚幻引擎 4 学习笔记 [1] :蓝图编程 Demo ​ 最近学习虚幻引擎,主要看的是 Siki 学院的课,课程链接:Unreal蓝图案例 - 基础入门 - SiKi学院|SiKi学堂 - unity ...

  5. Pytest 源码解读 [1] - [pluggy] 核心设计理念浅读

    背景: Pytest 是一个功能强大的 Python 测试框架,它使用了一个名为 "pluggy" 的插件系统来扩展其功能.在 Pytest 的源码中,pluggy 模块负责实现插 ...

  6. 【SpringBoot】AOP默认的动态代理

    分析: 当引入AOP相关依赖后 <dependency> <groupId>org.springframework</groupId> <artifactId ...

  7. Java21 + SpringBoot3集成七牛云对象存储OSS,实现文件上传

    目录 前言 实现步骤 引入maven依赖 修改配置文件 创建七牛云配置类 创建文件操作服务类 创建文件操作控制器 前端实现 运行效果 总结 前言 近日心血来潮想做一个开源项目,目标是做一款可以适配多端 ...

  8. 3.4 CSP-J 补赛游寄

    3.4 CSP-J 补赛游寄 Day -? 听说要去打比赛. Day -7 今天家长会,老师公布成绩 /fn/fn/fn.政治考废了,然后其他都挺好. 语文 $ 95 $,数学 $ 118 $,英语 ...

  9. MySQL主主+Keepalived架构安装部署

    需求:根据当前客户的生产环境,模拟安装部署一套MySQL主主+Keepalived架构的测试环境,方便后续自己做一些功能性的测试. 1.准备工作 2.MySQL安装部署 3.MySQL主主配置 4.K ...

  10. 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(下)

    第 3 章 ASP.NET Core 核心特性 3.5 配置 要访问配置,需要使用 ConfigurationBinder 类,它实现了 IConfigurationBuilder 接口,该接口包括两 ...