c++实现高精度四则运算
总概
由于c++
没有像python
、java
等语言对一些超大整数的处理机制--(java
中的大整数类啊,python中默认整数位数就可以无限大);所以,在对于一个c++学习者来说,对这类大整数的运算的掌握很有必要。同样,这也是对我们将人类模拟转化为代码语言的能力的一种提升。
所以:在此,给各位看官总结了四类高精度运算的处理方式:
-
高精度加法(两个大整数相加,所谓大整数,指其位数最高可达10^5)
-
高精度减法(两个大整数相减)
-
高精度乘法(大整数与一个小整数相乘)
-
高精度除法(大整数除以一个小整数)
高精度加法
//高精度加法
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
vector<int> add(vector<int> & a,vector<int> & b){
vector<int>sum;
int t = 0;//用来保存进位
for(int i=0;i<a.size() || i<b.size();i++){
if(i < a.size()) t += a[i];
if(i < b.size()) t += b[i];
sum.push_back(t%10);
t/=10;
}
if(t != 0) sum.push_back(t);
return sum;
}
int main(){
string a,b;
cin>>a>>b;
vector<int>A,B;
//我们输入时默认数据高位会在字符串低索引位置,但在这里我们采用低索引位置存储数据的低位。方便后续处理进位。
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i] - '0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i] - '0');
auto C = add(A,B);
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
return 0;
}
高精度减法
//高精度减法
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
string a,b;
bool cmp(vector<int>&a,vector<int>&b){
//判断a表示的数是否大于b
//1、比较位数
if(a.size()!=b.size()) return a.size()>b.size();
//2、位数相同则 从高位依次比位数大小
for(int i=a.size()-1;i>=0;i--){
if(a[i] != b[i]) return a[i] > b[i];
}
//最后如果两个数相同,返回真.注意,不能返回假,否则输出结果时回输出“-0”而不是“0”
return true;
}
vector<int> sub(vector<int> & a,vector<int> & b){
vector<int>C;
for(int i=0,t=0;i<a.size();i++){
t = a[i] - t;
if(i<b.size()) t -= b[i];
C.push_back((t+10) % 10);
if(t<0) t=1;
else t=0;
}
//现在C中存的是结果了,但我们还要去掉前导0,符合人们阅读习惯
while(C.size() > 1 && C.back()==0){
C.pop_back();
}
return C;
}
int main(){
cin>>a>>b;
vector<int>A,B;
for(int i=a.size()-1;i