高精度加法(含代码)

打印 上一主题 下一主题

主题 1062|帖子 1062|积分 3186

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
高精度加法

例 1

例如: 1111111111111+9, 列成竖式,
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. +                         9
  3. ---------------------------
复制代码
先算个位,
1+9=10,
满10, 向十位进1。
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. +                         9
  3.                          1
  4. ---------------------------
  5.                            0
复制代码
接下来, 处理进位
十位: 1+1=2 -> 2
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. +                         9
  3.                          1
  4. ---------------------------
  5.                          2 0
复制代码
百位: 无进位, 直接照抄. 1 -> 1
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. +                         9
  3.                          1
  4. ---------------------------
  5.                        1 2 0
复制代码
千位: 1 -> 1

万位: ...

...: ...

最高位: 1 -> 1
最终结果:
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. +                         9
  3.                          1
  4. ---------------------------
  5.    1 1 1 1 1 1 1 1 1 1 1 2 0
复制代码
所以, 1111111111111+9=1111111111120
例 2

1111111111111+8888888888889,
这个算式变成了高精度+高精度了。
还是列成竖式,
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3. ---------------------------
复制代码
先算个位,
1+9=10,
满10, 向十位进1。
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3.                          1
  4. ---------------------------
  5.                            0
复制代码
接下来, 算十位。
1+8+1=10,
满10, 向百位进1。
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3.                        1 1
  4. ---------------------------
  5.                          0 0
复制代码
千位, 万位...以此类推。
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3.                      1 1 1
  4. ---------------------------
  5.                        0 0 0
复制代码
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3.                    1 1 1 1
  4. ---------------------------
  5.                      0 0 0 0
复制代码
......
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3.    1 1 1 1 1 1 1 1 1 1 1 1
  4. ---------------------------
  5.      0 0 0 0 0 0 0 0 0 0 0 0
复制代码
最高位:
1+8+1=10,
向前一位进1.
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3. 1 1 1 1 1 1 1 1 1 1 1 1 1
  4. ---------------------------
  5.    0 0 0 0 0 0 0 0 0 0 0 0 0
复制代码
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3. 1 1 1 1 1 1 1 1 1 1 1 1 1
  4. ---------------------------
  5. 1 0 0 0 0 0 0 0 0 0 0 0 0 0
复制代码
所以,
1111111111111+8888888888889=10000000000000=1013
  1.    1 1 1 1 1 1 1 1 1 1 1 1 1
  2. + 8 8 8 8 8 8 8 8 8 8 8 8 9
  3. 1 1 1 1 1 1 1 1 1 1 1 1 1
  4. ---------------------------
  5. 1 0 0 0 0 0 0 0 0 0 0 0 0 0
复制代码
代码


  • 首先导入头文件。
  1. // 1. Import libraries
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <algorithm>
  7. #include <cstring>
  8. #include <cassert>
  9. #include <vector>
  10. // Import namespace 'std'
  11. using namespace std;
复制代码

  • 初始化变量。
  1. // 2. Initialize variables
  2. const int MAX = 1000;
  3. char s[MAX+1];
  4. int a[MAX+1], b[MAX+1],c[MAX+2];
复制代码

  • 定义主函数main()
[code]// 3. Define Main Functionint main(int argc, char **argv) {    for (int i=0;i
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表