範例程�碼 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;	// ¥h±¼¤wª¾²Å¸¹«áªº²Ä´X­Ó¦ì¸m
			int place = 0;	// ²Ä´X­Ó¦ì¸m

			// §Q¥Î¤À°Ï­pºâ s[i] ªº¦ì¸m (¤£§t¤w¦³²Å¸¹ªº¦ì¸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 ­È¥H¶i¦æ¤U­Ó´`Àô
			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;
}