侧边栏

洛谷 P1604 B进制星球

链接: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++,学了面向对象后就可以自己封装一个高精度计算器了

posted @ 2019-07-25 10:45  晴人  阅读(294)  评论(0编辑  收藏  举报