將 p 進制 n 轉換爲 q 進制。p 和 q 的取值範圍爲[2,36],其中,用到的數碼按從小到大依次爲:0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考慮小寫字母。 ios
將 p 進制 n 轉換爲 q 進制。p 和 q 的取值範圍爲[2,36],其中,用到的數碼按從小到大依次爲:0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考慮小寫字母。 ios
一共1+m 行:
1行爲 m,表示後面有 m 行(1 <= m <= 60).
其後的m行中,每行3個數: 進制p,p進制數n,以及進制 q。
三個數之間用逗號間隔。
n 的長度不超過50位。ide
轉換後的 q 進制數。spa
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
用普通的進制轉換思惟就能夠了code
AC代碼:blog
1 #include <string> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 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;i<n;i++) 9 #define frd0(i,x,n) for (int i=x;i>n;i--) 10 using namespace std; 11 int n,a[61],b[191],len; 12 string s; 13 void ex_change(int p,int q) 14 { 15 int tot=0,k=1; 16 while (k<=len) 17 { 18 int stp=0; 19 frn1(i,k,len) 20 { 21 int tmp=(stp*p+a[i]); 22 a[i]=tmp/q; 23 stp=tmp%q; 24 } 25 b[++tot]=stp; 26 while(!a[k] && k<=len) 27 k++; 28 } 29 frd0(i,tot,0) 30 if (b[i]<10) 31 printf("%d",b[i]); 32 else 33 printf("%c",char(b[i]+55)); 34 puts(""); 35 } 36 int main() 37 { 38 scanf("%d",&n); 39 while (n--) 40 { 41 cin>>s; 42 int p=0,k,q=0;len=0; 43 for (int i=0;s[i]!=',';k=++i) 44 { 45 p=p*10+s[i]-48; 46 k=i; 47 } 48 for (int i=k+1;s[i]!=',';k=++i) 49 if (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 } 57 return 0; 58 }