#include <iostream>
#include <cmath>
using namespace std;
int main()
{
string line="zzzzzz";
int L,N;
cin>>L>>N;
if(N<0)
{
int m=pow(26,L);
N=m+N;
}
int index=L-1,help_1=N,help_2;
while(true)
{
if(N==0)
{
line="aaaaaa";
break;
}
help_2=help_1%26;
help_1=help_1/26;
if(index==L-1 && help_2!=0)
line[index]-=help_2-1;
if(index!=L-1 && help_2!=0)
line[index]-=help_2;
if(help_2==0)
{
line[index]='a';
line[index-1]-=help_1-1;
break;
}
index--;
if(help_1<26)
{
if(index==L-1)
line[index]-=help_1-1;
else
line[index]-=help_1;
break;
}
}
for(int i=0;i<L;i++)
cout<<line[i];
return 0;
}
3个正确,1个错误,很可能是边界值处理有问题。参考下面的代码:
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int main()
{
int l,n,m=1,x,y;
char a[6];
cin>>l>>n;
m= pow(26,l);
n=m-n;
y=l;
while(l--)
{
x=n%26;
a[l]='a'+x;//第一次算出来的字符是字符串中的第L个的字符,第二次算出来的字符是字符串中的第L-1个字符
n=n/26;
}
for(int i=0;i<y;i++)
cout<<a[i]; //printf("%c",a[i]);//所以最后输出的时候是要倒着输出的
return 0;
}