首页 > 代码库 > B进制加法(洛谷1604)
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 }
B进制加法(洛谷1604)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。