两种表示方法的转换
题解:
wa超多的一题。。思路很简单,就是26进制思想,然后如果余数为0就往前一位借,就不写注释了
代码:
#include<stdio.h>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
using namespace std;
int main()
{
int i,j,k,n,test,tag,num,num1,num2;
char s[10005];
while(scanf("%d",&test)!=EOF)
{
while(test--)
{
memset(s,0,sizeof(s));
scanf("%s",s);
tag=1;
num=0;
for(i=0;i<strlen(s);i++)
{
if(tag&&s[i]>='0'&&s[i]<='9')
{
tag=0;
num++;
}
else if(s[i]>='A'&&s[i]<='Z')
tag=1;
}
if(num==1)
{
num1=0;
num2=0;
for(i=0;s[i];i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
num1=s[i]-'A'+1+num1*26;
//printf("num1=%d!!\n",num1);
}
else
{
num2=s[i]-'0'+num2*10;
//printf("num2=%d!!\n",num2);
}
}
printf("R%dC%d\n",num2,num1);
}
else
{
tag=0;
num1=0;
num2=0;
for(i=0;s[i];i++)
{
if(s[i]=='C')
{
tag=1;
continue;
}
if(!tag)
{
if(s[i]>='0'&&s[i]<='9')
num1=num1*10+s[i]-'0';
}
else
{
if(s[i]>='0'&&s[i]<='9')
num2=num2*10+s[i]-'0';
}
}
int t[10005];
i=0;
memset(t,0,sizeof(t));
while(num2>0)
{
t[i]+=num2%26;
if(t[i]==0)
{
t[i]=26;
num2-=26;
}
num2/=26;
i++;
}
for(j=i-1;j>=0;j--)
{
//printf("%d",t[j]);
printf("%c",t[j]+'A'-1);
}
//printf("\n");
printf("%d\n",num1);
}
}
}
return 0;
}