正整數的任意進位制轉換

2022-08-05 13:03:19 字數 1729 閱讀 1344

時間限制: 1 sec  記憶體限制: 128 mb

題目描述

將 p 進位制 n 轉換為 q 進位制。p 和 q 的取值範圍為[2,36],其中,用到的數碼按從小到大依次為:0,1,2,3,4,5,6,7,8,9,a,b,...,z,不考慮小寫字母。 

輸入一共1+m 行: 

1行為 m,表示後面有 m 行(1 <= m <= 60). 

其後的m行中,每行3個數: 進位制p,p進位制數n,以及進位制 q。 

三個數之間用逗號間隔。

n 的長度不超過50位。

輸出轉換後的 q 進位制數。

樣例輸入

6

18,2345678a123,18

15,23456,18

12,2345678,20

16,12345678,23

25,3456ab,21

18,ab1234567,22

樣例輸出
2345678a123

114e0

22b7a4

21a976l

7c2136

22jf0g367

用普通的進位制轉換思維就可以了ac**:

1 #include 

2 #include 3 #include 4 #include 5 #include 6

#define frn1(i,x,n) for (int i=x;i<=n;i++)

7#define fdn1(i,x,n) for (int i=x;i>=n;i--)

8#define frn0(i,x,n) for (int i=x;i9

#define frd0(i,x,n) for (int i=x;i>n;i--)

10using

namespace

std;

11int n,a[61],b[191

],len;

12string

s;13

void ex_change(int p,int

q)14

25 b[++tot]=stp;

26while(!a[k] && k<=len)

27 k++;28}

29 frd0(i,tot,0)30

if (b[i]<10

)31 printf("%d"

,b[i]);

32else

33 printf("

%c",char(b[i]+55

));34 puts(""

);35}36

intmain()

3748

for (int i=k+1;s[i]!='

,';k=++i)

49if (s[i]>='

0' && s[i]<='9'

)50 a[++len]=s[i]-48;51

else

52 a[++len]=s[i]-55

;53 frn0(i,k+1

,s.size())

54 q=q*10+s[i]-48;55

ex_change(p,q);56}

57return0;

58 }

進位制