範例程式碼 uva12335
//uva12335
#include <iostream>
#include <string>
#include <cstring>
#define LEN 21
using namespace std;
int main() {
int dataNum; // dataNum = Dؤ T
long long int k, factorial[LEN];
string s;
char *ans;
// p i h - factorial[i] = i!
factorial[0] = 1;
for(int i = 1; i < LEN; i++)
factorial[i] = factorial[i - 1] * i;
cin >> dataNum; // o data (Y T )
for(int d = 0; d < dataNum; d++) {
cin >> s >> k; // o (Y s, k)
// initialize
ans = new char [s.length() + 1];
memset(ans, '-', sizeof(char) * s.length());
ans[s.length()] = '\0';
for(int i = 0; i < s.length(); i++) {
long long int stage; // hwŸ᪺ĴXӦm
int place = 0; // ĴXӦm
// QΤϭp s[i] m (twŸm)
stage = k / factorial[s.length() - i - 1];
if(k % factorial[s.length() - i - 1] == 0)
stage--;
// Q stage X s[i] b ans m
for(int count = 0; count <= stage; place++) {
if(ans[place] != '-')
continue;
count++;
}
ans[place - 1] = s[i];
// ץ k ȥHiUӴ`
k = k % factorial[s.length() - i - 1];
if(k == 0)
k = factorial[s.length() - i - 1];
}
cout << "Case " << d + 1 << ": " << ans << endl;
delete [] ans;
}
return 0;
}