Copyright 2019 HisenZhang

2013年开始中国全面使用第二代居民身份证. 目前我国公民身份证号码由18位数字组成: 前6位为地址码, 第7至14位为出生日期码, 第15至17位为顺序码, 第18位为校验码. 其中第18位校验码用于快速检测身份证号是否合法(以防止输入错误等情况).

校验过程如下:

  1. 将身份证号逐位乘以对应的权重, 其中X表示数字10.
  2. 对上一步的结果求和
  3. 将校验和对11取模 mod 11
  4. 如果结果为1, 则该身份证号合法.

上述权重规定于中华人民共和国国家标准GB11643-1999.

在这个挑战里, 你需要编写一个程序来检验输入的身份证号是否合法.

Read more »

Copyright 2019 HisenZhang

1993年被提出的Brainfuck(以下简称BF)是一种极小化的语言, 全部使用的符号只有八种. 下面是BF的例程Hello World.

1
2
3
++++++++++ [>+++++++ >++++++++++ >+++>+<<<<-]
>++.>+.+++++++ ..+++.>++.<<+++++++++++++++ .
>.+++.------ .-------- .>+.>.

BF的工作原理模拟了一台简单的图灵机Turing Machine. 这个在1936年由图灵提出的计算模型描述了在一条无限长的纸带上, 机器的读写头不停的移动或读写以完成计算任务.

虽然图灵模型看上去简单, 但是图灵机可以解决大多数计算问题. 今天常用的计算机正是按照图灵机模型设计的. 因此, 理解了BF的工作原理, 也就很大程度上理解了现代计算机的数学原理和一些简单的计算理论Computation Theory.

在这个挑战里, 你需要编写一个解释器来运行BF语言.

Read more »

近期在尝试编写一个Simpson's Rule近似数值积分的例子, 忽然想到可以把被积函数作为一个参数传入, 使这个积分函数更具有通用性. 这个例子我们会在文末作为实际应用来阐述. 在开始之前, 我们先要讨论一下C语言里的函数到底和函数调用到底是什么.

这篇文章篇幅较长, 且涉及较多示例和证明代码, 建议在桌面设备上阅读. 对于证明代码, 请务必亲自动手编译, 只有真正动手敲过的代码才算有深入理解.

Read more »