题目地址:​​点击打开链接​

思路:有点进制转换的意思

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

typedef long long ll;
using namespace std;

char a[30];

void zhuang(int sum)
{
if(sum == 26 || sum == 27)
{
printf("Z");
return;
}
if(sum == 0)
return;
zhuang(sum/26);
int k = sum % 26;
if(k == 0)
{
printf("Z");
}
else
{
printf("%c",k +'A'-1);
}
}

int main()
{
int t;
int i;
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
int len = strlen(a);
if(a[0] >= '0' && a[0] <= '9')
{
int n = 0;
for(i=0; i<len; i++)
{
n = n * 10 + a[i] - '0';
}
zhuang(n);
printf("\n");
}
else
{
int sum = 0;
for(i=0; i<len; i++)
{
sum = sum * 26 + a[i] - 'A' + 1;
}
printf("%d\n",sum);
}
}
return 0;
}


错误代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

typedef long long ll;
using namespace std;

char a[30];

void zhuang(int sum)
{
if(sum == 26)//这里是和AC代码的唯一区别
{
printf("Z");
return;
}
if(sum == 0)
return;
zhuang(sum/26);
int k = sum % 26;
if(k == 0)
{
printf("Z");
}
else
{
printf("%c",k +'A'-1);
}
}

int main()
{
int t;
int i;
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
int len = strlen(a);
if(a[0] >= '0' && a[0] <= '9')
{
int n = 0;
for(i=0; i<len; i++)
{
n = n * 10 + a[i] - '0';
}
zhuang(n);
printf("\n");
}
else
{
int sum = 0;
for(i=0; i<len; i++)
{
sum = sum * 26 + a[i] - 'A' + 1;
}
printf("%d\n",sum);
}
}
return 0;
}

测出来的,我这个代码输入702会输出AAZ,而实际是ZZ