本题本质上是将10进制整数转换为26进制。其中a表示0,z表示25,如:aaa可以看做000,zzz表示(25)(25)(25)转换为10进制就是26^3-1.
代码如下
//此题本质是进制转换,可以将字符串看做L位26进制整数,a表示0,z表示25.
#include<stdio.h>
void convertTo26(int n,int weishu_L,int * data){//转换为26进制,存储在data[]中
int i=weishu_L-1;
while(n){
data[i]=n%26;
n/=26;
i--;
}
}
int pow26(int weishu_L){//返回26的L次方
int i,ret=1;
for(i=0;i<weishu_L;i++)
ret*=26;
return ret;
}
int main(){
int weishu_L,reverseOrder,i,data[6]={0};
scanf("%d %d",&weishu_L,&reverseOrder);
convertTo26(pow26(weishu_L)-reverseOrder,weishu_L,data);
for(i=0;i<weishu_L;i++)
putchar(data[i]+'a');
return 0;
}