algrithms

A framework for event driven FSM

建立一个通用事件驱动的状态机:

  1. 状态机的架构与具体的事件和状态的定义分开.
  2. 状态与事件是低耦合的, 即状态不用关心是什么事件导致状态机进入这个状态.
  3. 每个状态的进入或者退出, 会触发对应的处理函数.

Implement

以下代码为了结构清晰, 会省略一些细节和保护处理, 也有可能不符合C的强类型语法要求, 就权当成伪代码看待吧, 直接copy & paste, 编译器肯定会报错滴 -,-

计算n的阶乘末尾有多少个0

计算n的阶乘末尾有多少个0,例如5! = 120 末尾有1个0,10!= 3628800末尾有2个0。

  • 对于一个多因式相乘, 末尾有多少个0, 取决于有多少个10相乘.
  • 10的倍数也可以为结果贡献0, 比如10, 20, 30, 因此可以记为 P = i * 10
  • 10可以因式分解成5 2, 于是 P = i 5 * 2
  • 对于n!, 共有1 2 ... * n