整理一下大数加法和大数乘法模板

两者都需要进位,所以难度相较于大数除法和大数取余稍微难点

大数加法:

两个加数都用string存就行,设为st1,st2。我们在这里想一下和最多有几位,两个最大的n位数相加,我们假设一个最大的n+1为数,即1后面n个0,与最大的n位数相加还是n+1位数 ,故两个数相加,和的位数一定小于等于max(st1.len,st2.len)+1

无论是大数加法还是大数乘法,在模拟计算的过程中,都要将运算与进位分开,即先用一个int的数组把各位相加的结果都存起来,最后按照从低位到高位进位的顺序进行进位

在这里对于加法运算我们还应该注意的是,加法讲究同位相加,我们用string接收到的两个数的长度很有可能不一样,因为输入的关系,st[len-1]是个位,所以我们使用for(int i = 1; i <= min(st1.len,st2.len); i++) a[max(st1.len,st2.len)+1-i] = st1[st1.len-i]-'0'+st2[st2.len-i]-'0';这样对齐相加很重要

大数乘法:

  我们还是来讨论两数相乘最多能有几位,对于st1与st2来讲,乘积的位数应该是len1+len2,对于两个最大的n位数,存在一个最小的n+1位数,即100.....0,与最大的n位数相乘是99..9(n)0...(n)0,得证。

另外与加法相比较,乘法存在一个错位相加的点,这个地方我们可以规定是i+j+1,因为我们还是要把个位放到len-1的位置上,

i+j+1的话就是len1-1+len2-1+1 = len-1,把个位的地方填满,然后朝着高位进位,我们制定i+j+1错位机制还形成了初始状态下啊[0]是空的,用a[0]作为溢出位

mmh学长的大数模板

某日,小白做一个大数乘法的题目,原来的模板时间超限,于是去 求助mmh学长,在mmh学长那里学到了nlogn的大数乘法的模板,轻松 过掉了100000位的两个数相乘的问题。

输入格式:

输入两行,每行是一个不超过5000位非负整数。

输出格式:

第一行输出这两个数之和。 第二行输出这两个数之积。

输入样例:

1
1

输出样例:

2
1
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll;
string st1;
string st2;
int main()
{cin>>st1>>st2;if(st1.length() < st2.length()) swap(st1,st2);int len1 = st1.length();int len2 = st2.length();int len = len1 + len2;ll a[len];ll b[len1];memset(b,0,sizeof(b));for(int i = 1; i <= len2; i++){b[len1-i] = (st1[len1-i]-'0') + (st2[len2-i]-'0');}for(int i = len1-len2-1; i >= 0; i--){b[i] = (st1[i]-'0');}int power;for(int i = len1-1; i > 0; i--){b[i-1] += b[i]/10;b[i] %= 10;}power = b[0] / 10;b[0] %= 10;if(power) cout<<power;for(int i = 0; i < len1; i++){cout<<b[i];}cout<<endl;memset(a,0,sizeof(a));for(int i = len2-1; i >= 0; i--){for(int j = len1-1; j >= 0; j--){a[i+j+1] += (st1[j]-'0')*(st2[i]-'0');}}for(int i = len-1; i > 0; i--){a[i-1] += a[i]/10;a[i] %= 10;}int k = 0;while(a[k] == 0){k++;}if(k == len) cout<<0;for(int i = k; i < len; i++){cout<<a[i];}cout<<endl;return 0;
}

7-7 mmh学长的大数模板 (20分)相关推荐

  1. c++ 大数类 大数模板

    分别使用C++中的运算符重载的方法来实现大数之间的数学运算,包括加法.减法.乘法.除法.n次方.取模.大小比较.赋值以及输入流.输出流的重载.. 并且使用这个大数模板,顺利AC了HDOJ上的1134这 ...

  2. hdu 1134 卡特兰数(大数模板)

    卡特兰数 递推公式: C(n)=C(2n,n)/(n+1)  即用数组表示为c[i]=c[i-1]*(4*i-2)/(i+1); 一般形式 直接 表达 c[1]=1; for(i=2;i<40; ...

  3. Mogrt免费模板 20个手绘涂鸦社交媒体链接PR模板

    Mogrt免费模板 20个手绘涂鸦社交媒体链接PR模板下载 这是一个奇妙的运动图形模板.它包含3种不同样式的20个文本动画.它们非常易于使用,每个都有自己的自定义控制器.你可以在你的拆箱,短剧,模仿, ...

  4. 考研数学如何整理错题笔记?140分学长总结的模板,拿走直接用(含错题笔记)

    考研数学如何整理错题笔记?140分学长总结的模板,拿走直接用(含错题笔记) 数学错题笔记 2021<考研数学接力题典1800>勘误表(附学霸高分笔记) 2020考研初试成绩已经公布了,对于 ...

  5. 1081 Rational Sum (20 分)_22行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given N rational numbers in the form numerator/denominator, you a ...

  6. C++学习之路 | PTA乙级—— 1013 数素数 (20分)(精简)

    1013 数素数 (20分) 令 P ​i ​​ 表示第 i 个素数.现任给两个正整数 M≤N≤10 ​4 ​​ ,请输出 P ​M ​​ 到 P ​N ​​ 的所有素数. 输入格式: 输入在一行中给 ...

  7. L1-046 整除光棍 (20 分)567

    L1-046 整除光棍 (20 分) 这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数 ...

  8. 7-2 最大流 加强版 (20 分)

    7-2 最大流 加强版 (20 分) 这是一道模板题. 给定 n 个点,m 条边,给定每条边的容量,求从点 s 到点 t 的最大流. 输入格式: 第一行四个整数n,m,s,t. 接下来的 m 行,每行 ...

  9. L1-7 天梯赛的善良 (20 分)

    L1-7 天梯赛的善良 (20 分) 天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组 ...

  10. 7-1 查找书籍(20 分)(程序设计天梯赛模拟练习题)

    7-1 查找书籍(20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书 ...

最新文章

  1. 如何让Ubuntu系统支持WebP图片格式
  2. 【Python面试】 列举Python中的标准异常类?
  3. iphoneX样式兼容
  4. 银泰上云 打造“从-1到0再到1”数字化成长逻辑
  5. 【Linux】Linux中文本编辑器和系统管理命令
  6. Linux下tensorflow1.13.1 C++ API的编译和使用
  7. element-ui源码阅读笔记(button篇)
  8. 在ruby使用终端启用外部程序
  9. 深度学习笔记_卷积神经网络参数计算
  10. 学堂在线《sql server轻松学》数据库第5-8章习题答案
  11. DPDK Release 20.05
  12. 7-5 华氏度转摄氏度(四舍五入) (5分) java pta
  13. 什么是OEM、ODM、OBM
  14. Mysql从入门到入魔——8. 视图、存储过程、事务处理
  15. graphpad画生存曲线怎么样去掉删失点_手把手教你用GraphPad Prism绘制生存曲线
  16. 什么是嵌入式?嵌入式技术应用领域
  17. 一步步推导由欧拉角到旋转矩阵的计算过程
  18. 网络层(2.网际协议IP)
  19. Verilog设计(二):分频电路设计
  20. Apollo之Canbus处理来自Control的Cmd

热门文章

  1. 轻松搞定C语言中复杂的声明
  2. IOS开发笔记 IOS如何访问通讯录
  3. 郁闷的.net程序员与坑爹的.net 4 client profile
  4. 利用遗传算法求解TSP问题
  5. 前天我看见了一只兔子,昨天是一头小鹿,而今天则是你
  6. php soap 超时,PHP SoapClient超时
  7. java lombok ppt,Lombok详解
  8. tensor.detach() 和 tensor.data 的区别
  9. 使用windows远程桌面连接ubuntu
  10. 组合分类和回归的神经网络模型