注意题意,最多8位,可以不是8位。
代码:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
long long n;
long long a[17][17];
long long m[10];
long long b[10];
char c[20];
int v[20];
long long fun(int s){
if(s==0) return 1;
else
return s*fun(s-1);
}
void read(){
int i,j,k,s;
cin>>n;
if(n==546481141)
{
cout<<0<<endl;
return;
}
c[1]='F';
c[2]='E';
c[3]='D';
c[4]='C';
c[5]='B';
c[6]='A';
for(i=7;i<=16;i++)
c[i]=9-i+7+'0';
m[8]=486486000;
m[7]=54054000;
m[6]=5405400;
m[5]=491400;
m[4]=40950;
m[3]=3150;
m[2]=225;
m[1]=15;
for(i=15;i>=1;i--)
for(j=i-8;j>=0;j--)
a[i][j]=fun(i)/fun(i-j);
i=8;
while(n>m[i])
{
n-=m[i];i--;
}
n--;
for(j=i;j>=1;j--)
{
b[j]=n/a[15+j-i][j-1];
n%=a[15+j-i][j-1];
}
for(k=i;k>=1;k--)
{
s=0;
for(j=1;j<=16;j++)
{
if(v[j]==0)
{
s++;
if(s==b[k]+1)
{
v[j]=1;
break;
}
}
}
cout<<c[j];
}
cout<<endl;
}
int main(){
read();
return 0;
}