高精度 加减乘除
- add:
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <algorithm> 5 6 using namespace std; 7 8 vector<int> a, b, c;//c = a + b 9 10 void add(){ 11 int t = 0;//代表进位 12 for(int i = 0;i < a.size() || i < b.size();++i){ 13 if(i < a.size()) t += a[i]; 14 if(i < b.size()) t += b[i]; 15 c.push_back(t%10); 16 t /= 10; 17 } 18 if(t)c.push_back(t); 19 } 20 21 int main(){ 22 string s1,s2; 23 cin >> s1 >> s2; 24 25 for(int i = s1.size()-1;i >= 0;--i)a.push_back(s1[i] - '0'); 26 for(int i = s2.size()-1;i >= 0;--i)b.push_back(s2[i] - '0'); 27 28 add(); 29 30 for(int i = c.size()-1;i >= 0;--i)cout << c[i]; 31 }
- mul:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 //a*b = c 7 void mul(vector<int>& a,int b,vector<int>& c){ 8 int t = 0; 9 for(int i = 0;i < a.size();++i){ 10 c.push_back((a[i]*b + t) % 10); 11 t = (a[i]*b + t) / 10; 12 } 13 if(t)c.push_back(t); 14 } 15 16 int main(){ 17 string s; 18 int b; 19 cin >> s >> b; 20 vector<int> a; 21 for(int i = s.size()-1;i >= 0;--i)a.push_back(s[i] - '0'); 22 23 vector<int> c; 24 mul(a,b,c); 25 for(int i = c.size()-1;i >= 0;--i)cout << c[i]; 26 27 return 0; 28 }
- div:
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 5 using namespace std; 6 7 void div(vector<int>& a,int b,vector<int>& c,int& r){ 8 for(int i = 0;i < a.size();++i){ 9 r = r * 10 + a[i]; 10 c.push_back(r/b); 11 r %= b; 12 } 13 } 14 15 int main(){ 16 string s; 17 cin >> s; 18 vector<int> a; 19 for(int i = 0;i < s.size();++i)a.push_back(s[i] - '0'); 20 int b; 21 cin>>b; 22 23 int r = 0; 24 vector<int> c; 25 div(a,b,c,r); 26 bool flag = true; 27 for(int i = 0;i < c.size();++i){ 28 if(c[i] != 0)flag = false; 29 if(flag == false)cout << c[i]; 30 } 31 cout << endl << r; 32 return 0; 33 }
- sub:
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 5 using namespace std; 6 7 //a >= b return true else return false 8 bool cmp(vector<int>& a,vector<int>& b){ 9 if(a.size() != b.size()) return a.size() > b.size(); 10 for(int i = a.size()-1;i >= 0;--i) 11 if(a[i] != b[i]) return a[i] > b[i]; 12 return true; 13 } 14 15 //a >= b 16 void sub(vector<int>& a, vector<int>& b, vector<int>& c){ 17 int t = 0;//代表借位 18 for(int i = 0;i < a.size();++i){ 19 t = a[i] - t; 20 if(i < b.size()) 21 t -= b[i]; 22 //这句包含了t > 0 and t < 0,结果都是t+10 % 10 23 c.push_back((t+10)%10); 24 if(t >= 0)t = 0;//代表不需要借位 25 else t = 1;//借位 26 } 27 //去掉前面的0 28 while(c.size() > 1 && c.back() == 0)c.pop_back(); 29 } 30 31 int main(){ 32 string s1, s2; 33 cin >> s1 >> s2; 34 vector<int> a, b, c; 35 36 for(int i = s1.size()-1;i >= 0;--i)a.push_back(s1[i]-'0'); 37 for(int i = s2.size()-1;i >= 0;--i)b.push_back(s2[i]-'0'); 38 39 if(cmp(a,b)){ 40 sub(a, b, c); 41 for(int i = c.size()-1;i >= 0;--i)cout << c[i]; 42 } 43 else{ 44 sub(b, a, c); 45 cout << '-'; 46 for(int i = c.size()-1;i >= 0;--i)cout << c[i]; 47 } 48 49 return 0; 50 }
本文来自博客园,作者:SXQ-BLOG,转载请注明原文链接:https://www.cnblogs.com/sxq-blog/p/12065880.html