链接:https://www.luogu.org/problem/P1604
题解:b进制下的高精度加法
代码:
1 #include<bits/stdc++.h> 2 #define inf 0x3f3f3f3f 3 using namespace std; 4 typedef long long ll; 5 typedef long double ld; 6 const int M = int(1e6)*2 + 5; 7 const int mod = 10056; 8 inline int lowbit(int x) { 9 return x & (-x); 10 } 11 12 int change(char& c){ 13 if(c>='0' && c<='9') return c-'0'; 14 if(c>='A' && c<='Z') return c-'A'+10; 15 } 16 char change(int& a){ 17 if(a>=0 && a<=9) return a+'0'; 18 else if(a>=10) return a-10+'A'; 19 } 20 vector<int> A,B,Ans; 21 string add(string& a,string& b,int& n){ 22 if(a.size()<b.size()) return add(b,a,n); 23 24 string ans; 25 A.clear(); 26 B.clear(); 27 28 for(int i=a.size()-1;i>=0;i--){ 29 A.push_back(change(a[i])); 30 } 31 for(int i=b.size()-1;i>=0;i--){ 32 B.push_back(change(b[i])); 33 } 34 35 int t=0; 36 for(int i=0;i<b.size();i++){ 37 int sum=t+A[i]+B[i]; 38 t=sum/n; 39 Ans.push_back(sum%n); 40 } 41 for(int i=b.size();i<a.size();i++){ 42 int sum=A[i]+t; 43 t=sum/n; 44 Ans.push_back(sum%n); 45 } 46 if(t) 47 Ans.push_back(t); 48 49 for(int i=Ans.size()-1;i>=0;i--){ 50 char c=change(Ans[i]); 51 ans+=c; 52 } 53 54 return ans; 55 } 56 57 int main() 58 { 59 int n;cin>>n; 60 string a,b; 61 cin>>a>>b; 62 cout<<add(a,b,n); 63 return 0; 64 }
备注:连续用python水了四道高精度,最后还是用c++,学了面向对象后就可以自己封装一个高精度计算器了