试题 历届试题 Excel地址(模拟,进制转换)
问题描述
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
....
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
....
样例输入
26
样例输出
Z
样例输入
2054
样例输出
BZZ
数据规模和约定
我们约定,输入的整数范围[1,2147483647]
思路
这题之前省赛见过,是填空题,上手还是有点麻烦的,给绕了,基础还是要打好。
关键点在于 它是26进制,但是26的时候没有进位,补0,而是用’Z'代替,所以当取余数为0时,要把值改为26。
每次我们要减掉前一个取余的数,再除以26. 比如AZ这个数是52,Z代表26,(52-26)/26=1='A';
其余就是进制转换的模板,最后反向输出即可
满分代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int ans;
string str;
cin>>ans;
int tot;
while(ans!=0){
tot=ans%26;
if(ans%26==0){tot=26;}
str+=tot-1+'A';
ans=(ans-tot)/26;
}
for(int i=str.size()-1;i>=0;i--)
cout<<str[i];
}