竖式加法计算器
结果
总和
- 进位
- 2, 1, 0, 0
竖式加法计算器把一串整数相加,一列一列地算,并把每一步往前进的位都印出来。它是有过程的那种加法:给出的除了总和,还有每一位上写下来的数字,以及一条一位一项的进位链,所以答案可以对着过程核,不必只能相信。默认的三个加数是 1234、567 与 89,加起来是 1890,进位链从个位起依次是 2、1、0、0。这一页只收整数——小数要先按小数点对齐再补零,那是另一套写法;负号也不是数字,它要另起一列。进位链的项数永远等于和的位数,这是核起来最快的一条。
1234 + 567 + 89 逐列的推导
| 列 | 这一列的数字 | 进上来的数 | 合计 | 写下的数字 | 进出去的数 |
|---|---|---|---|---|---|
| 0 | 4 + 7 + 9 | 0 | 20 | 0 | 2 |
| 1 | 3 + 6 + 8 | 2 | 19 | 9 | 1 |
| 2 | 2 + 5 + 0 | 1 | 8 | 8 | 0 |
| 3 | 1 + 0 + 0 | 0 | 1 | 1 | 0 |
一列一行,从个位往上读,也就是实际算的方向。数字那一列把每个加数在这一位上出什么全列出来,包括位数不够、出 0 的那些——读者最容易在一步上找不着位置。合计是进上来的数加上这一列的数字,最后两列把它拆成写下来的数字与往左送出去的进位。最上面一行的进上来的数是 0,因为个位右边没有东西;最下面一行的进出去的数是 0,因为左边没有东西了。列号都是整数,数字那一串是记号,所以这张表在全部十个语言里长得一样。
公式
第 k 列:合计 = a₁ 的第 k 位 + … + aₙ 的第 k 位 + 进上来的数 写下的数字 = 合计 除以 10 的余数 进出去的数 = 合计 除以 10 取整
- a₁ … aₙ
- 加数:两到十个整数,每个不超过一万亿。最右边那一列同时是每一个数的个位,所以这些数必须先按相同数位对齐写下来,这套写法才有意义。
- 第 k 列
- 从右往左数第 k 位,个位算第零列。每一列上,每个加数各出一个数字;位数不够、伸不到这一列的加数出的是 0 而不是被跳过——一个数字值多少,由它所在的列决定,与它原本来自哪个数无关。
- 进位
- 往左边一列送过去的那个数,也就是合计在扣掉写下来的数字之后剩下的那部分,即它的十位。一列最多进 9,而最高的一列还可能越过最长加数的宽度再进一位——9 + 9 会得到两位数,就是这个原因。
- 总和
- 加起来的结果,同时也是进位链的对照物:链上一位对应一列,所以它的项数等于总和的位数。前导的零一律不写,007 就是 7。
需要把加法讲出来、而不只是要一个答案时用这一页:教进位这一步、核对一个手算出来的总数,或者一次加好几个数、而容易出错的正是中间那几次进位。把一串数加成总数之后最常被问的下一件事是平均是多少,而那一页收的正是同一串数。
算例
1234 + 567 + 89
- 个位:4 + 7 + 9 = 20,写 0 进 2
- 十位:3 + 6 + 8 + 2 = 19,写 9 进 1
- 百位:2 + 5 + 0 + 1 = 8,写 8 进 0
- 千位:1 + 0 + 0 + 0 = 1,写 1 进 0
- 从高位往低位数下来,写下的数字是 1、8、9、0
- 总和是 1890,进位链是 2, 1, 0, 0
三个加数分别是四位、三位、两位,所以后两个在高位上已经没有数字了,在那些列上出的是 0。进位链有四项,总和有四位——这一页就是围着这个对应关系建的,而它在任何输入上都成立,包括一次进位都没有的那种。
9 + 9:多出一列
- 个位:9 + 9 = 18,写 8 进 1
- 左边已经没有列了,于是这一次进位开出新的一列:写 1 进 0
- 写下的数字是 1 与 8
- 总和是 18,所以进位链是 1, 0
两个一位数得到两位数答案。进位链为那个加数根本没有的列也留了一项,这就是它会比最宽的加数还长一位的原因。把 1, 0 当成从答案里退位来读是错的——链是从个位往上排的,所以第一项就是个位的那次进位。
一次进位都没有的总和
- 个位:0 + 0 + 0 = 0,写 0 进 0
- 十位:0 + 0 + 0 = 0,写 0 进 0
- 百位:1 + 2 + 3 = 6,写 6 进 0
- 总和是 600,进位链是 0, 0, 0
这一格一次进位都没有,而零照样印出来。一条遇到第一个非零就停下的链没法对着列读,而这一格要读的正是「链上的项与位一一对应」。这一格的加数用空格分隔而不是分号:两种都收,而空格避开了逗号——有些国家把逗号读成小数点。
局限
只收整数。小数也要竖式对齐之后才能加,但那是先按小数点排齐、再补零补到一样长,与「多写几列」不是同一套过程——所以小数在这里被拒收,而不是被当成整数悄悄算下去。负数被拒收也是同一类理由:负号不是数字,它需要自己的一列和自己的一条规则。加数收两个到十个:一个数没有列可写,十个以上就该用一串数的求和而不是竖式。每个加数不超过一万亿,总和不超过能被精确表示的那个整数上界,因为数字是一位一位取出来的,越过去之后写下来的数字就对不上答案了。这一页做加法,不做减法、乘法与除法——那三种各有自己的竖式过程。
常见问题
- 竖式加法是什么?
- 按照数写下来的样子来加:把相同数位对齐,从个位往左一列一列地算,多出来的部分往左边一列进。算出来的和与计算器给的是同一个,区别在于中间那几步是留下的,而不是丢掉的。
- 为什么要从个位开始算?
- 因为进位是往左走的。每一列都要用到右边那一列进上来的数,所以个位不定下来,十位就没法算。从别的地方开始,等进位到了还得回头重算一遍。
- 进位链有什么用?
- 它把每一列往左边送出去的那个数列出来,从个位开始。它的项数就是总和的位数,所以顺带是一条自查线:漏了一次进位,或者少算了一列,两个长度就对不上了。
- 为什么答案的位数会比最长的加数还多?
- 因为最后一列还可能进位。9 加 9 把个位写满了还多出一个进位,它没地方去,于是开出新的一列,9 + 9 就成了 18 而不是 8。这一列就是进位链会比最宽的那个加数还长一位的原因。
- 可以加小数吗?
- 这一页不行。小数也能竖式相加,但要先按小数点对齐、再用零补到一样长,而那会改变「一列」的含义——从数位变成小数点后的第几位。这一页会拒收这种输入,而不是把 1.5 当成 15 去算。
- 加数的顺序有影响吗?
- 总和在任何顺序下都一样。进位链不一样:换一个顺序,每一列收到的数字就变了,某一列的数字之和不巧正好是 9 时,换个排法就会进位。答案与顺序无关,中间过程与顺序有关。
参考资料
- Base — 一个数字值多少由它所在的列决定,这正是「从个位开始」的理由 — Wolfram MathWorld (United States)
- Binary — 二进制里一模一样的进位过程,那里一个 1 + 1 就已经进位,链最短也最好看 — Wolfram MathWorld (United States)
- Additive Inverse — 一个数的相反数,也是「负的加数不能直接写进这一列」的原因 — Wolfram MathWorld (United States)