分析
c++
#include<iostream>
#include<cstring>
#include<algorithm>
#define ffor(i,s,e) for(int i=s;i<e;i++)
using namespace std;
int ans[10];//正向存26进制数
int getMQ(int n){
int ans=1;
while(n>26){
ans*=26;
n/=26;
}
return ans;
}
void borrow(string& str,int pos){
bool first=str[0]=='A';
str.at(pos)='Z';
for(int i=pos-1;i>=0;i--){
char ch=str[i];
if(ch>'A'){
ch=ch-1;
str.at(i)=ch;
break;
}else if(ch=='A'){
str.at(i)='Z';
}else{
while(ch==' '){
str.at(i)='Y';
ch=str[--i];
}
i++;//照顾for 的i--
}
}
if(first&&str[0]=='Z') str=str.substr(1);
}
int main(){
int n;
cin>>n;
int quan=getMQ(n);
int k=0;
while(n&&quan){
ans[k]=n/quan;
n-=quan*ans[k];
quan/=26;
k++;
}
while(quan){
ans[k++]=0;
quan/=26;
}
string ans_str;
ffor(i,0,k){
ans_str+=ans[i]?char(ans[i]-1+'A'):' ';
}
// cout<<ans_str<<endl;
int sn=ans_str.size();
for(int i=sn-1;i>=0;--i){
if(ans_str[i]==' '){ //向前借位去掉空格
borrow(ans_str,i);
}
}
cout<<ans_str<<endl;
return 0;
}