运城姚孟网站建设,专业的网页设计服务公司,小程序制作收费,asp.net 旅游网站开发基础算法-高精度加法
高精度算法 为什么要使用高精度算法 C 每一个变量都有自己的类型#xff0c;每个类型都有自己的存储长度范围。
名称 关键字 字节 长度 短整型 short int 2 (-2的15次方)~(2的15次方-1) 整型 int 4 (-2的31次方)~(2的31次方…基础算法-高精度加法
高精度算法 为什么要使用高精度算法 C 每一个变量都有自己的类型每个类型都有自己的存储长度范围。
名称 关键字 字节 长度 短整型 short int 2 (-2的15次方)~(2的15次方-1) 整型 int 4 (-2的31次方)~(2的31次方-1) 长整型 long long 8 (-2的63次方)~(2的63次方-1) 浮点型 float 4 (1.17549e-038)~(3.40282e038) 双精度浮点型 double 8 (2.22507e-308)~(1.79769e308) 当我们进行大数据四则运算时非常容易超过数据类型存储的最大长度此时便要采用高精度四则法进行运算。
高精度算法的实现方法 有压位与不压位两种他们具有如下不同
存储不压位的话vector或者数组中每个数据是0~9压位以后每个数据是0到9999。 计算过程不压位的话除数和模数都是10压位以后除数和模数都是10000。 输出不压位的话直接输出压位的话需要格式化输出最高位直接输出即可其他位都需要输出4位数字不足的前面补零。 本人对压位高精度算法不太了解在后面的实现过程当中便不予体现后续有时间会继续补充。
高精度加法详解基本思想 在数据处理当中我们会常使用加法运算例如当有一个数123456789时可以使用数组对其每一位进行存储那么数组第 0 存储数的个位 9 便于我们进位操作在高位上补充数字。因为在数组开头想补充数字需要将整个数组向后平移一位如果在末尾补充数字比较好加。即下表
1 2 3 4 5 6 7 8 9 a[8] a[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0] 高精度加法即模拟加法运算从个位算起得出和判断是否大于 0 若大于 0 则进行进位操作在十位上加 1 后面同理操作逢十进一。 在实现过程中需要使用三个数组进行存储两个对加数存储一个对和存储最后对存储和的数组进行变换操作或者反向输出即得高精度加法结果。题目描述 给定两个正整数不含前导 0计算它们的和。
输入格式
共两行每行包含一个整数。
输出格式
共一行包含所求的和。
数据范围
1≤整数长度≤100000
输入样例
12 23
输出样例
35
实现方法 1. 方法一不压位模板代码注解 a.size() 是从0开始计数因此在这里要进行 -1 操作。 auto 是让编译器自己推断数据类型。 t 位中间进位变量。实现代码
#include bits/stdc.h
using namespace std;vectorintadd(vectorintA,vectorintB)
{vectorintC;int t0;for(int i0;i A.size()||iB.size();i){if(iA.size()){tA[i];}if(iB.size()){tB[i];}C.push_back(t%10);t/10;}if(t){C.push_back(1);}return C;
}
int main()
{string a,b;vectorintA,B;cinab;for(int ia.size()-1;i0;i--){A.push_back(a[i]-0);}for(int ib.size()-1;i0;i--){B.push_back(b[i]-0);}auto Cadd(A ,B);for(int iC.size()-1;i0;i--){coutC[i];}system(pause); return 0;
}