B进制加法(洛谷1604)

Posted wolf940509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B进制加法(洛谷1604)相关的知识,希望对你有一定的参考价值。

分析:码农题,照这模拟就行,高精度的B进制,注意字符串反转的技巧。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=2200;
15 char s[]={\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'A\',\'B\',\'C\',\'D\',\'E\',\'F\',\'G\',\'H\',\'I\',\'J\',\'K\',\'L\',\'M\',\'N\',\'O\',\'P\',\'Q\',\'R\',\'S\',\'T\',\'U\',\'V\',\'W\',\'X\',\'Y\',\'Z\'};
16 int n; //进制
17 int vis1[maxn],vis2[maxn];
18 int ans[maxn];
19 int main()
20 {
21     while(cin>>n)
22     {
23         string a,b;
24         cin>>a;
25         cin>>b;
26         memset(vis1,0,sizeof(vis1));
27         memset(vis2,0,sizeof(vis2));
28         int len1=a.length();  //反转第一个串
29         for(int i=0;i<len1/2;i++){
30             char temp=a[i];
31             a[i]=a[len1-1-i];
32             a[len1-1-i]=temp;
33         }
34         for(int i=0;i<len1;i++){
35             int pos;
36             for(int j=0;j<36;j++){
37                 if(a[i]==s[j]){
38                     pos=j; break; 
39                 }
40             }
41             vis1[i]=pos;
42         }
43         int len2=b.length();   //反转第二个串
44         for(int i=0;i<len2/2;i++){
45             char tt=b[i];
46             b[i]=b[len2-i-1];
47             b[len2-1-i]=tt;
48         }
49         for(int i=0;i<len2;i++){
50             int pos;
51             for(int j=0;j<36;++j){
52                 if(b[i]==s[j]){
53                     pos=j; break;
54                 }
55             }
56             vis2[i]=pos;
57         }
58         int mx=max(len1,len2);
59         int cnt=0;
60         for(int i=0;i<mx;i++){
61             int temp=vis1[i]+vis2[i]+cnt;
62             if(temp>=n){
63                 cnt=1;
64                 ans[i]+=temp%n;
65             }else{
66                 cnt=0;
67                 ans[i]+=temp;
68             }
69         }
70         if(cnt==1){
71             ans[mx]=1; ++mx;
72         }
73         string ss;
74         for(int i=0;i<mx;i++){
75             ss+=s[ans[i]];
76         }
77         for(int i=0;i<mx/2;i++){
78             char yy=ss[i];
79             ss[i]=ss[mx-i-1];
80             ss[mx-i-1]=yy;
81         }
82         cout<<ss<<endl;
83     }
84     return 0;
85 }
View Code

 

以上是关于B进制加法(洛谷1604)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1604 B进制星球

P1604 B进制星球

B进制星球(多进制 高精加)

洛谷 P1952 火星上的加法运算_NOI导刊2009提高

noip 1998 洛谷P1013 进制位

洛谷 P1092 虫食算