OSDN Git Service

Update bignum.md
authorCaoBowen <42204218+CBW2007@users.noreply.github.com>
Fri, 13 Sep 2019 05:20:51 +0000 (13:20 +0800)
committerGitHub <noreply@github.com>
Fri, 13 Sep 2019 05:20:51 +0000 (13:20 +0800)
docs/math/bignum.md

index 3625a3f..3312e63 100644 (file)
@@ -14,9 +14,9 @@
     -    `a` 、 `b` 分别是长度不超过 $1000$ 的十进制非负整数;
     -    `<op>` 是一个字符( `+` 、 `-` 、 `*` 或 `/` ),表示运算。
     -   整数与运算符之间由一个空格分隔。
-
+    
     输出:运算结果。
-
+    
     -   对于 `+` 、 `-` 、 `*` 运算,输出一行表示结果;
     -   对于 `/` 运算,输出两行分别表示商和余数。
     -   保证结果均为非负整数。
@@ -274,7 +274,36 @@ void sub(int a[LEN], int b[LEN], int c[LEN]) {
 
 试一试,输入 `1 2` ——输出 `/9999999` ,诶这个 OI Wiki 怎么给了我一份假的代码啊……
 
-如你所见,上面的程序只能处理 $a \geq b$ 的情况,至于负数如何处理——就交给聪明的你啦。
+其实处理被减数比减数小的情况很简单。
+
+$$
+当x<0时,\left| x \right|=-x
+$$
+
+$\because$当a<b时,(a-b)<0。
+$$
+\therefore \left|a-b\right|=-(a-b)
+$$
+$\because​$只有符号不同的两个数互为相反数。
+
+又$\because$这里的绝对值运算只是将负号变为正号。
+$$
+\therefore a-b=-\left|a-b\right|
+$$
+
+$$
+-\left|a-b\right|=-\left[-\left(a-b\right)\right]
+$$
+
+$$
+-\left[-\left(a-b\right)\right]
+=-\left[-a+b\right]
+=-[b-a]
+$$
+
+答案~~并不~~简单明了,如果你看不懂数学公式,就来一个简单粗暴的:
+
+交换a和b的值并正常减法运算,然后在得数前加上负号!
 
 ### 乘法