- D - Defining Labels
- 這一題是一個典型的進制轉換題,但是如果不知如何轉換,則可能做不出來。
- 首先,我們來看一組對應:
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 00, 01, 02, 03, ……, 99, 000, 001, 002, ……
- 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, 12, 13, 14, ……,110,111, 112, 113, ……
- 可以看出10->9,其他的1->0, 2->1, 3->2, ……
- 只要編號中不出現9這個數,那麼實際值就是原始十進制的一一對應。
- 假設一個k位的編號爲d(k)d(k-1)……d(2)d(1)d(0),那麼它的對應的原始十進制值應該是——(d(k)+1)*10k+(d(k-1)+1)*10k-1+……+(d(2)+1)*10²+(d(1)+1)*10+(d(0)+1)
- 逆過來就可得解題思路:將原始十進制進行數位數字提取,提取每一位時,要將此數-1再進行操作。
代碼:
#include<cstdio>
using namespace std;
void dfs(int x,int k)
{
if(x==0)
{
return;
}
--x;
dfs(x/k,k);
putchar('0'+x%k+10-k);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int k,x;
scanf("%d%d",&k,&x);
dfs(x,k);
putchar('\n');
}
return 0;
}