题目链接

题意 : 给你一个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\n%d %s\n\n",a,s,b,d) ;
35     }
36     return 0 ;
37 }
View Code

 

posted on 2014-04-08 19:34  枫、  阅读(215)  评论(0编辑  收藏  举报