#include<iostream>#include<vector>usingnamespace std;constint N =100010;
vector<int>add(vector<int>& A, vector<int>& B)//低位向高位计算{int len =max(A.size(), B.size());//选取最大长度
vector<int> C;int t =0;//t用来算数和进位for(int i =0; i < len; i++){//累加if(i<A.size()) t += A[i];if(i<B.size()) t += B[i];//相当于 t = A[i] + B[i] + t;
C.push_back(t %10);//取余
t = t /10;//进位}//最后检测是否进位if(t) C.push_back(t);return C;}intmain(){
string s1;
string s2;
cin >> s1 >> s2;
vector<int> a1;
vector<int> b1;//翻转存入for(int i = s1.size()-1; i >=0; i--){
a1.push_back(s1[i]-'0');}for(int i = s2.size()-1; i >=0; i--){
b1.push_back(s2[i]-'0');}
vector<int> t =add(a1, b1);for(int i = t.size()-1; i >=0; i--){
cout << t[i];}return0;}
高精度减法
#include<iostream>usingnamespace std;#include<vector>boolcmp(vector<int>& A, vector<int>& B)//A是否大于B{if(A.size()!= B.size())return A.size()>= B.size();for(int i = A.size()-1; i >=0; i--){if(A[i]!= B[i])return A[i]>= B[i];}returntrue;}
vector<int>sub(vector<int>& A, vector<int>& B){if(!cmp(A, B)){
cout <<'-';returnsub(B, A);}
vector<int> C;int t =0;//运算和借位for(int i =0; i < A.size(); i++){
t = A[i]- t;//借位if(i < B.size()) t -= B[i];
C.push_back((t +10)%10);//存差 ,+10防止t为负数if(t <0) t =1;//借位else t =0;//无需借位}//去除前导零while(C.size()>1&& C.back()==0) C.pop_back();return C;}intmain(){
string s1;
string s2;
cin >> s1 >> s2;
vector<int> a1;
vector<int> b1;//翻转存入for(int i = s1.size()-1; i >=0; i--){
a1.push_back(s1[i]-'0');}for(int i = s2.size()-1; i >=0; i--){
b1.push_back(s2[i]-'0');}
vector<int> t =sub(a1, b1);for(int i = t.size()-1; i >=0; i--){
cout << t[i];}return0;}
高精度乘法(大数×小数)
#include<iostream>usingnamespace std;#include<vector>
vector<int>mul(vector<int>& A,int b){
vector<int> C;int t =0;//进位for(int i =0; i < A.size()|| t; i++)//如果有进位,需要继续{if(i < A.size()) t += A[i]* b;//累加乘积
C.push_back(t %10);//存余
t /=10;//进位}//去除前导零 当b = 0的时候会出现while(C.size()>1&& C.back()==0) C.pop_back();return C;}intmain(){
string s1;int b;
cin >> s1 >> b;
vector<int> a1;//翻转存入for(int i = s1.size()-1; i >=0; i--){
a1.push_back(s1[i]-'0');}
vector<int> t =mul(a1, b);for(int i = t.size()-1; i >=0; i--){
cout << t[i];}return0;}
高精度除法(大数÷小数)
#include<iostream>usingnamespace std;#include<vector>
vector<int>div(vector<int>& A,int b){
vector<int> C;int r =0;//余数for(int i = A.size()-1; i >=0; i--){
r = r *10+ A[i];//被除数
C.push_back(r / b);//存商
r %= b;//余数}reverse(C.begin(), C.end());//为了去除前导零while(C.size()>1&& C.back()==0) C.pop_back();return C;}intmain(){
string s1;int b;
cin >> s1 >> b;
vector<int> a1;//翻转存入for(int i = s1.size()-1; i >=0; i--){
a1.push_back(s1[i]-'0');}
vector<int> t =div(a1, b);for(int i = t.size()-1; i >=0; i--){
cout << t[i];}return0;}