题意 : 给你一个a进制的数串s,让你转化成b进制的输出。 A = 10, B = 11, ..., Z = 35, a = 36, b = 37, ..., z = 61,0到9还是原来的含义。
思路 : 这个题因为牵扯了英文字母所以比较复杂一点,先将所有出现的英文字母转化成他们所代表的数,然后进行进制转换。
1 //POJ 1220 2 #include <stdio.h> 3 #include <string.h> 4 #include <iostream> 5 #include <math.h> 6 7 using namespace std ; 8 9 int i,l,k,a,b,T,t[555],A[555] ; 10 char s[555],d[555] ; 11 12 int main() 13 { 14 scanf("%d",&T) ; 15 while(T--) 16 { 17 scanf("%d %d %s",&a,&b,s) ; 18 for(k = i = strlen(s) ; 0 < i-- ; ) 19 t[k-1-i] = s[i]-(s[i] < 58 ? 48 : s[i] < 97 ? 55 :61) ; 20 for(l = 0 ; k ; ) 21 { 22 printf("%d ",k) ; 23 for(i = k ; 1 < i-- ; ) 24 { 25 t[i-1] += t[i] % b * a ; 26 t[i] /= b ; 27 } 28 A[l++] = t[0] % b ; 29 t[0] /= b ; 30 for( ; 0 < k && !t[k-1] ; k--) ; 31 } 32 for(d[l] = i = 0 ; i < l ; i++) 33 d[l-1-i] = A[i] + (A[i] < 10 ? 48 : A[i] < 36 ? 55 : 61) ; 34 printf("%d %s %d %s ",a,s,b,d) ; 35 } 36 return 0 ; 37 }