【问题描述】
以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示。
现在小A要在这个操作系统上实现一个计算器,这个计算器要能实现26进制数的加法运算。你能帮小A实现这个计算器吗?
【输入形式】
输入的第一行包括一个整数N(1<=N<=100)。
接下来的N行每行包括两个26进制数x和y,它们之间用空格隔开,每个数的位数最多为10位,我们可以保证相加的结果的位数最多也是10位。每个数会用小A所设计的操作系统中的表示方法来表示,如:bsadfasdf。即每个数的各个位均由26个小写字母a-z中的一个来表示。
【输出形式】
输出x和y相加后的结果,结果也要用题目中描述的26进制数来表示。
【样例输入】
4
ba cd
c b
b c
ba c
【样例输出】
dd
d
d
bc
做题感悟:注意看清变量名呀,本以为此题比较简单,结果就因为变量名看错,活活debug一小时!!!
#include<bits/stdc++.h>
using namespace std;
int changechar(char );//转换单个字符为数字
int changestr(string);//转换26进制数为十进制
char changeint(int);//转换单个数字为字符
int main() {
int n;
cin>>n;
cin.get();//吸收回车符
while(n--) {
string x,y;
string xy;
getline(cin,xy);//读入一行字符串
stringstream ss;//利用字符串流实现分隔读入
ss<<xy;
int sum=0;//转换成的十进制数
ss>>x>>y;
int numx=0;
int numy=0;
numx=changestr(x);//将相应的字符串转换为十进制数
numy=changestr(y);
sum=numx+numy;//求和
stack<char>mystack;//利用栈进行结果输出 因为进行取余进制操作时是从个位开始,而输出必须从高位开始
while(sum) {//此循环将十进制转换为26进制
int ys;
ys=sum%26;
sum/=26;
char cs=changeint(ys);
mystack.push(cs);
}
while(!mystack.empty()) {//进行结果
cout<<mystack.top();
mystack.pop();
}
cout<<endl;
}
return 0;
}
int changestr(string str) {
int key=str.size()-1;
int ssum=0;
int sssum;
for(int i=0; i<str.size(); i++) {
sssum=changechar(str[i]);
ssum+=sssum*pow(26,key);
key--;
}
return ssum;
}
int changechar(char s) {
switch(s) {
case 'a':
return 0;
case 'b':
return 1;
case 'c':
return 2;
case 'd':
return 3;
case 'e':
return 4;
case 'f':
return 5;
case 'g':
return 6;
case 'h':
return 7;
case 'i':
return 8;
case 'j':
return 9;
case 'k':
return 10;
case 'l':
return 11;
case 'm':
return 12;
case 'n':
return 13;
case 'o':
return 14;
case 'p':
return 15;
case 'q':
return 16;
case 'r':
return 17;
case 's':
return 18;
case 't':
return 19;
case 'u':
return 20;
case 'v':
return 21;
case 'w':
return 22;
case 'x':
return 23;
case 'y':
return 24;
case 'z':
return 25;
}
}
char changeint(int ssss) {
switch(ssss) {
case 0:
return 'a';
case 1:
return 'b';
case 2:
return 'c';
case 3:
return 'd';
case 4:
return 'e';
case 5:
return 'f';
case 6:
return 'g';
case 7:
return 'h';
case 8:
return 'i';
case 9:
return 'j';
case 10:
return 'k';
case 11:
return 'l';
case 12:
return 'm';
case 13:
return 'n';
case 14:
return 'o';
case 15:
return 'p';
case 16:
return 'q';
case 17:
return 'r';
case 18:
return 's';
case 19:
return 't';
case 20:
return 'u';
case 21:
return 'v';
case 22:
return 'w';
case 23:
return 'x';
case 24:
return 'y';
case 25:
return 'z';
}
}