当前位置:   article > 正文

编程的50种基础算法_C++编程基础算法高精度加法

编程算法

计算需求与C++现状阐述:

在c++中,整型变量有int和long long 。int类型占4个字节,也就是能表示到2的32次方,对应的为10的9次方数量级,,long long类型占8个字节,也就是能表示到2的64次方,对应的为10的18次方数量级,那么如果给定的数字已经远远大于这个数量级,c++中原有的数字变量类型就不够用了,那怎么办呢?

988d89158c2dbbbf182f5e720d61baf0.png

解决方法:

字符数组模拟大整数的运算,统称高精度运算。

高精度算法现状:

竞赛当中考得较少,目前java和python语言中,都可以直接模拟出高精度算法,那为什么要学呢?

没说一定要学,不会也不影响,高精度运算的底层逻辑就是数学中运算的逻辑,学会了,编码的实现能力肯定能上一层楼。

算法核心:

1.将大整数保存成字符数组后,再转成数字数组。为了方便计算(计算从个位开始,但是保存的字符数组第一位却是最高位),数字数组为逆序。

2.进位需要考虑到。

3.为了申请数组长度的方便,a+b=c,其中a,b,c均定义成动态数组。动态数组自带push_back()意思是数组入栈,size()函数是测量数组的长度。

 f92c1e68cdf1d903f5daf0c73f40fef7.png

边界条件考虑:

1.定义tmp变量来保存每位上a与b的相加,tmp的个位数加到c数组,十位数为进位。

2.前置零的情况,比如0001+0002=0003,不能输出0003,只能输出3。对于这种情况用一个变量标记一下就行了。

 9c4725654bbc652e99afb6904d316e94.png

代码:

#include

#include

#include

using namespace std;

vector add(vector &a,vector &b)//加法

{

vector c;

int tmp=0;//定义tmp变量保存临时的相加数,看到tmp变量就应该知道这就是个备胎

for(int i=0;i

{

if(i

if(i

c.push_back(tmp%10);//个位数取余加到c数组当中去

tmp/=10; //tmp只取十位数,保存下一位的进位

}

if(tmp) c.push_back(tmp);//如果tmp变量最后不为0,说明两数相加,位数比以前多一位,所以也要加上c数组当中去。

return c;

}

int main()

{

string m,n;

vector a,b,c;//定义动态数组

cin>>m>>n;

for(int i=m.length()-1;i>=0;i--)//从个位开始将字符转置到数字

a.push_back(m[i]-'0');

for(int i=n.length()-1;i>=0;i--)//从个位开始将字符转置到数字

b.push_back(n[i]-'0');

c=add(a,b);

int tmp=0;//tmp赋初值等于0

for(int i=c.size()-1;i>=0;i--)

{

if(c[i]!=0||i==0) tmp=1;//利用tmp来去掉前置0的情况

if(tmp)

 cout<

}

return 0;

}

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号