作者:X3B0A1

1.0 问题

在我们熟悉的数据类型中,能够储存的最大的数也只是longlong的范围。

虽然有些编译器也提供__int128类型,但是最多也只能表示40位左右的数,大小依然有限,而且适用范围也很受限。

那么,又没有办法来模拟非常长的整数呢?

~~所以用python他不香么,自带高精度还有各种库~~

~~手动 @€€£ (doge~~

1.1 思路

既然变量不能储存大数,我们可以尝试使用数组来储存一个数。

用数组的每一位来储存那个数字上的一位,也就是说,用一个长度为n的数组记录一个n位数字。

那么,问题又来了,我们如何进行加法运算呢

首先,回顾一下小学学习的竖式计算:

1 9 1

+ 9 8 1

--------

1 1 7 2

可以看到,用竖式计算时,为了保证进位正确,是从低位向高位运算的

我们可以模拟这个运算方法:

首先为了方便读入,使用string直接读入大数

将string类型的数转换为数字,并为了进位方便,倒叙存储在数组内

len1 = str1.length();

len2 = str2.length();

//从 len - 1 开始到0遍历数组,减去1是因为数组下标从0开始,方便操作for(int i = len1 - 1; i >= 0; i--){

//转换为数字 num1[len1 - i] = str1[i] - '0';

}

for(int i = len2 - 1; i >= 0; i--){

num2[len2 - i] = str2[i] - '0';

}

遍历数组,对于每一组数,先两个数加起来:

sum[i] += num1[i] + num2[i];

然后把两数的和对10取整,即进位。

例如,两数的和为9,对10取整为0,即进位为0; 两数的和为19,对10取整为1,即进1位。

sum[i + 1] = sum[i] / 10;

处理完进位后,把两数的和对10取余,留下个位。

例如,和为9,对10取余,留下个位为9;和为19,对10取余,留下个位为9。

sum[i] %= 10;

最后将数组倒叙输出即可。

1.2 完整代码

根据上面的描述,可以得到如下代码:

#include#include#include

using namespace std;

const int MAXn = 2333;

int num1[MAXn], num2[MAXn], sum[MAXn];

int len1, len2;

int main(){

//读入 string str1, str2;

cin >> str1 >> str2;

//转换 len1 = str1.length();

len2 = str2.length();

//从 len - 1 开始到0遍历数组,减去1是因为数组下标从0开始,方便操作 for(int i = len1 - 1; i >= 0; i--){

//倒叙存储 把字符转换为数字 num1[len1 - i] = str1[i] - '0';

}

for(int i = len2 - 1; i >= 0; i--){

num2[len2 - i] = str2[i] - '0';

}

//进行加运算 int len = max(len1, len2);

for(int i = 0; i <= len; i++){

//此处使用“+=” 是因为可能有进位 sum[i] += num1[i] + num2[i];

//处理进位 直接把进的为赋值给sum[i - 1] sum[i + 1] = sum[i] / 10;

//保留个位 sum[i] %= 10;

}

//输出 //进位有可能导致位数增加1 if(sum[len + 1]){

len++;

}

//倒叙输出 for(int i = len; i >0; i--){

cout << sum[i];

}

return 0;

}

1.3 时间复杂度分析

该算法次数最多的循环为最大数的数位次,时间复杂度即为

python高精度加法_14.高精度加法相关推荐

  1. (压位)高精度乘法,高精度加法,高精度减法,高精度除法

    大值 乘 大值: 题目链接:https://www.luogu.com.cn/problem/P1303 # include <iostream> # include <string ...

  2. 实数加法 小数高精度加法 c++ vector实现

    题目地址: [Vjudge] https://vjudge.net/problem/%E8%AE%A1%E8%92%9C%E5%AE%A2-T1180 [计蒜客] 实数加法 - 题库 - 计蒜客 (j ...

  3. EOJ 3037:十六进制加法(高精度+数组位运算)

    一.思路: 1.字符数组读入,整形数组存储,字符数组输出 2.类似于十进制大数加法,用整型数组模拟运算:总使得长度长的字符串作为s1,这涉及到字符数组交换 3.每次结束时清空整型数组 二.注意点: 1 ...

  4. 大数加法(高精度)A+B题解

    我又回来啦 这道题会用到大数加法与大数减法,但是要考虑负数的情况 情况 处理方法 两个数都是正数 正常相加 两个数都是负数 在两个数绝对值相加的结果前加上一个'-' 第一个是负数,另一个是正数 比较其 ...

  5. PAT甲级1002 A+B for Polynomials:[C++题解]字符串、多项式加法或高精度加法

    文章目录 题目分析 题目链接 题目分析 本题数据范围是1000 ,可以开一个数组 X [ ] ,X[i ]表示多项式中次幂是i的系数是多少. 因此,本题可以开两个数组,对应相加,然后输出非零项即可. ...

  6. Python赚钱千万不能有加法思维

    大家好,我是一行 很多读者都知道我是做科研的时候接触到python,但当时想的更多的是这玩意学会是不是可以赚钱- 但我做着做着就陷入了深深的质疑,一直在做的就是求职和接单,怎么像跪着要饭的呀 多少人像 ...

  7. 矩阵 python 加法_Python矩阵加法

    矩阵 python 加法 Here you will get program for python matrix addition. In python "list" concep ...

  8. 如何使用Python实现图像融合及加法运算

    本文分享自华为云社区<[Python图像处理] 五.图像融合.加法运算及图像类型转换>,作者:eastmount. 本篇文章主要讲解Python调用OpenCV实现图像融合及加法运算,包括 ...

  9. python找数字、做加法_Python数学1-2:理解数字——自然数加法,python,12,认识

    目前的数字,只能通过这样的方式来定义. z = zero() one = next(z) two = next(one) three = next(two) four = next(three) 而且 ...

最新文章

  1. python爬虫requests-Python爬虫(requests模块)
  2. Spring Boot Admin 集成诊断利器 Arthas 实践
  3. html 打开页面光标自动选中输入框_初识selenium之web自动化
  4. v-modedl的修饰符
  5. 全国计算机等级考试题库二级C操作题100套(第10套)
  6. 少儿编程150讲轻松学Scratch(十二)-用Scratch制作石头剪子布游戏
  7. brackets作为html编辑器,为前端而生丨编辑器 Brackets 及配置推荐
  8. 用python玩转数据答案_大学mooc2020用Python玩转数据课后答案
  9. set.contains()分析
  10. 游戏开发之类的构造函数和析构函数(C++基础)
  11. 鸿蒙系统全屋定制,华为推出鸿蒙 1+2+N 全屋智能、智慧屏 V 系列,还有一款陪伴机器人小艺精灵...
  12. 令牌环(Token-Ring)
  13. tplink无线网卡的linux,ubuntu上tp-link无线网卡驱动安装
  14. [弗曼学习法] Study for learning methods
  15. EasyUI——基本布局
  16. 腾讯实习生面试经历分享
  17. Jenkins 登录时离线 offline
  18. 使用端到端深度学习模型完成PPI任务两篇论文笔记
  19. 劝学:不积跬步,无以至千里,不积小流,无以成江海.
  20. Android使用Mp4v2用h264流和aac流合成mp4

热门文章

  1. python装饰器的使用场景
  2. 不用第三方库,也能用 Python 作图,效果还不错
  3. python help()函数(查看特定模块、关键词、函数等用法)
  4. C语言编译链接生成可执行文件四大步骤:预处理(-E)->编译(-S)->汇编(-c) ->链接
  5. web前端入门学习 css(4)(盒子模型)
  6. Brainburn movies
  7. Python 面向对象封装和继承
  8. Python__数据结构与算法——表、栈、队列
  9. android 加载动画效果_这效果炸了,网易云音乐“宇宙尘埃”特效
  10. java switch char_Java7中Switch为什么只支持byte、short、char、int、String