Gym 102452D Defining Labels 數位數字提取

  • 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;
}
發佈了24 篇原創文章 · 獲贊 0 · 訪問量 768
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章