题目描述:
Excel表格的第1列为A,
Excel表格的第2列为B,
…
Excel表格的第26列为Z,
…
Excel表格的第28列为AB,
…
Excel表格的第19007列为ABCA。
这里我整理了一下Excel表格的列A~Z与数值之间的转换关系。
字母转换为数值:
直接按位乘权值。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1010;
ll a[N];
char s[N];
int main()
{
scanf("%s",s);
int len=strlen(s);
a[0]=1;
for(int i=1;i<N;i++)
a[i]=a[i-1]*26;
ll ans=0;
for(int i=len-1,j=0;i>=0;i--,j++)
ans+=(s[i]-'A'+1)*a[j];
cout<<ans<<endl;
return 0;
}
数值转换为字母:
在10进制当中,10占两位,
而Excel中26进制的Z只占了一位。
下面代码中while中的n- -是灵魂所在。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1010;
int ans[N];
int main()
{
int n,cnt=0;
cin>>n;
while(n)
{
n--;
ans[cnt++]=n%26;
n/=26;
}
for(int i=cnt-1;i>=0;i--)
printf("%c",ans[i]+'A');
return 0;
}