试题 历届试题 Excel地址(模拟,进制转换)

问题描述
  Excel单元格的地址表示很有趣,它使用字母来表示列号。
  比如,
  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];
}

 

原文地址:https://www.cnblogs.com/mohari/p/12865295.html