/*
Show Problem
题目:霍格沃茨的A+B
问题编号:310 [提交该题] [讨论该问题] [有关讨论] [Who AC] [相关题解]
My Flag:Unsubmited
题目类型
模拟
描述
如果你是哈迷的话,肯定知道在《哈利·波特》一书里,霍格沃茨(Hogwart)魔法学校是很有名的。
现在Harry Potter就读Hogwart一年级,他遇到了一个小麻烦,现在需要你来帮他。在Hogwart,A+B是很奇特的。
它是按质数的顺序来进位的。例如:1,0+2,1=1,0,1(用,来分隔每一位)。个位是2进制,十位是3进制,百位是5进制,
千位是7进制,万位是11进制……Hogwart一年级要求计算的两个加数的最高位是万位。
输入格式
输入一个形如1,0+2,1字符串s。
输出格式
输出相加后的结果。
样例输入
1,0+2,1
样例输出
1,0,1
*/
#include<cctype>
#include<string>
#include<iostream>
#define comma ","
using namespace std;
int main (void){
char alphabet[11]={’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’A’};
int ws[6]={2,3,5,7,11,18};
int a[6]={0},b[6]={0},ans[6]={0},posa,posb;posa=posb=0;
string s;cin>>s;
int pos=s.find(’+’);
string s1=s.substr(0,pos);
//cout<<s1<<’ ’;
string s2=s.substr(pos+1,s.size()-pos-1);
//cout<<s2<<’ ’;
for (int i=s1.size()-1;i>=0;i-=2){
int c;
if (isdigit(s1[i]))c=s1[i]-’0’;
else c=10;
if (i!=0&&isdigit(s1[i-1]))
c+=10;
a[posa++]=c;
}
//for (int i=posa-1;i>=0;i--) cout<<a[i]<<’ ’;cout<<endl;
for (int i=s2.size()-1;i>=0;i-=2){
int c;
if (isdigit(s2[i]))c=s2[i]-’0’;
else c=10;
if (i!=0&&isdigit(s2[i-1]))
c+=10;
b[posb++]=c;
}
//for (int i=posb-1;i>=0;i--) cout<<b[i]<<’ ’;cout<<endl;
int posc=max(posa,posb);
for (int i=0;i<posc;i++){
ans[i]=a[i]+b[i];
}
//for (int i=posc-1;i>=0;i--) cout<<ans[i]<<’ ’;cout<<endl;
for (int i=0;i<posc;i++){
if (ans[i]>=ws[i]){
ans[i]-=ws[i];
ans[i+1]++;
}
}
if (ans[posc]!=0)
posc++;
//for (int i=posc-1;i>=0;i--) cout<<ans[i]<<’ ’;cout<<endl;
string res="";
for (int i=posc-1;i>0;i--){
res+=alphabet[ans[i]];
res+=comma;
//cout<<alphabet[ans[posc]]+’,’;
}
//cout<<endl;
res+=alphabet[ans[0]];
cout<<res;
//while(1);
return 0;
}
/*
1,0+2,1
1+10,6,4,2,1
=======
1,0,1
*/