进制转换问题,这里进位是直接从Z 到A 的,如果前一位是ZZZ则下一位是AAAA要特别处理一下n是26的倍数的地方,其他的与进制转换相同
做这道题的感受:这道题实在是算不上是难题,平时也就罢了,但是在比赛的时候很有可能把这道题作为首选的题,一开始做题一定要重视,像我,一开始觉得它很简单就直接上去敲代码,结果一直wr,搞得我对自己的能力产生强烈怀疑,但是比赛一结束我马上思路就清晰了,抗压能力差的人还是要按照老规矩,先用手写再上去敲代码,当然不如果这道题对你来说像1+1=2那么简单,直接敲也没关系的
代码:
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
char c[27];
char str[50];
char b[50];
int l;
long n;
void init()
{
int i;
c[0]='Z';
c[1]='A';
for(i=2;i<27;i++)
c[i]=c[i-1]+1;
}
void getnun()
{
int i;
n=0;
int t;
for(i=l-1;i>=0;i--)
{
t=str[i]-'0';
n+=t*(int)pow(10,l-i-1);
}
}
void charngenum()
{
int i;
n=0;
int t;
for(i=l-1;i>=0;i--)
{
t=str[i]-64;
n+=t*(int)pow(26,l-i-1);
}
cout<<n<<endl;
}
int main()
{
int t;
int len;
int i;
int r;
cin>>t;
init();
while(t--)
{
cin>>str;
l=strlen(str);
if(str[0]<='9')
{
getnun();
len=0;
while(n>0)
{
if(n<=26)
{
b[len]=c[n];
len++;
break;
}
if(n%26==0)
{
b[len]=c[0];
len++;
n/=26;
n--;
continue;
}
else
{
r=n%26;
b[len]=c[r];
len++;
n/=26;
}
}
for(i=len-1;i>=0;i--)
cout<<b[i];
cout<<endl;
}
else
{
charngenum();
}
}
return 0;
}