C++高精度加法

Posted 和球球一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++高精度加法相关的知识,希望对你有一定的参考价值。

我们知道,计算机有一个显著的特点就是运算速度快,运算精度高。尤其是在处理比较大的数据时,计算机的优势就更加明显。截止到2019年12月15日,中国最快的计算机是“天河一号”。那么计算机是如何进行运算的呢?

例:用C++语言编写一个求两个数的和的程序。

程序:

#include<iostream>using namespace std;int main(){ int a,b;  cin>>a>>b;//输入a,b两数  cout<<a+b;//输出a,b的和 return 0;}

求两个数的和,用C++语言很容易编写。C++中现有的整数数据类型有int和long long型,我们知道int型整数最大能到10的9次方,也就是10位数,而long long型整数最大能到10的19次方,也就是20位数。那么问题来了,如果a、b的位数比较多呢?比如:a、b两数是100位的整数或者1000位的整数,这时它们的和如何计算呢?这就是我们今天要说的高精度加法。


例:现有两个10000位的正整数,要求将它们加起来输出。

分析:

(1)高精度加法,所用到的算法很简单,其实就是我们小学所学的加法“竖式”计算。将两个加数的对应数位对齐,也就是说个位对个位、十位对十位、百位对百位,对应的数位进行加法操作,有进位的要进位。

(2)高精度加法要将两个加数按对应的位数一位一位地处理,所以在实践中,将两个加数分别用两个数组进行存储,问题就会变得简单。

(3)之前我们已经说过,C++中最大的整数是long long型,最大位数是20位。所以对于10000位的正整数,我们输入的数据类型应该是一个字符串,也就是string型的数据。

程序代码如下:

#include<iostream>#include<cstring>#include<algorithm>//STL(标准模板库)中的算法库 提供了通用的函数供程序员直接调用  //如:遍历(for_each)、查找(find)、二分查找(binary_search、lower_bound、upper_bound) // 去除重复(unique)、填充(fill)、前一个排列(pre_permutation)、下一个排列(next_permutation)、排序(sort)等 using namespace std;const int MAXN=10005;int A[MAXN],B[MAXN],C[MAXN],Ans[MAXN],Len_A,Len_B,Len_Ans;void Read(int *A,int &Len){//int *A 定义一个整型的变量指针 ,可看作一个整数型的数组  string s; cin>>s; Len=s.length(); for(int i=0;i<Len;i++){ A[i]=s[i]-48;//A[i]=s[i]-'0';将字符转换成对应的数字  } reverse(A,A+Len);//对A[0]…A[Len-1]进行翻转 ,逆序 } //输入函数,将输入的字符串转换成对应的数字组成的数组,并将数组逆序,即个位放到第一位,方便计算 int main(){ Read(A,Len_A);//输入第一个加数  Read(B,Len_B);//输入第二个加数  Len_Ans=max(Len_A,Len_B);// 两数和的位数取这两个加数中位数多的那个数的值  memset(C,0,sizeof(C));//初始化控制进位的数组C ,初始值均为0,当发生进位时,对应的数位的值变成1  for(int i=0;i<=Len_Ans;i++){//因为可能有进位,所以要运算到比数组的元素个数加1  Ans[i]=A[i]+B[i]+C[i];//加上前一位的进位值  if(Ans[i]>=10) { C[i+1]=(Ans[i])/10;//处理进位 也可直接用 C[i+1]=1;  Ans[i]%=10;//进位之后原数位上的数 也可用 Ans[i]-=10;  } } if(Ans[Len_Ans]>0) Len_Ans++;//最后一次如果有进位,则位数加1 ,两个10000位的数相加,和有可能是10001位  //while(Ans[Len_Ans]>0) Len_Ans++; for(int i=Len_Ans-1;i>=0;i--){ cout<<Ans[i]; }//将得到的数组逆序输出就是我们求的和 也可先将数组翻转,然后正序输出  return 0;}

以上就是高精度加法运算。在之后的学习中我们将继续讲解高精度减法、高精度乘法、高精度除法运算。







【C++】高精度加法


欢迎加入知识星球:球球小课堂 获取arduino相关程序源代码

(球球自己经营的知识星球,会不定时地分享其学习成果)

【C++】高精度加法


【C++】高精度加法


关注视频号:杨老师编程小课堂,欣赏更多arduino小作品






以上是关于C++高精度加法的主要内容,如果未能解决你的问题,请参考以下文章

高精度加法(C++实现)

C++高精度加法

C++ 实现高精度的计算

高精度加法(含代码)

高精度加法简洁代码

高精度加法