进制转换问题,这里进位是直接从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;
}
本文探讨了一道关于进制转换的编程题目的解决策略和比赛中的应对技巧。作者分享了初赛时的失误与赛后反思,强调了在压力环境下保持冷静的重要性,并提供了具体的代码实现,帮助读者理解如何高效地进行不同进制之间的转换。

被折叠的 条评论
为什么被折叠?



