任意进制转换--(62进制)

题目:62进制(非大数除法实现)

  '0'-'9'-----0-9

  A-Z-------10-35

  a-z--------36-62

具体说明可以参考此博客

http://www.cppblog.com/kuangbin/archive/2011/08/25/154299.html?opt=admin

 


在此简短说一下:

   例如  10进制的18 转换为2进制

   被除数        除数         商       余数

     1 8    /    2 ---------09        0    ----------  1轮结束

       9    /     2 --------  4         1    ---------   2轮结束

       4   /      2--------   2         0     ---------  3轮结束

      2   /       2 --------  1         0    ---------   4轮结束

      1  /        2 --------  0         1   ----------   5轮结束

      0  -----------结束

  二进制  10010(18) 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define N 1005
 5 using namespace std;
 6 
 7  int StrToNum(char t)//字符--->>数字
 8 {
 9    if(t>='0'&&t<='9')return t-'0';//数字
10    if(t>='A'&&t<='Z')return t-'A'+10;//大写字母
11    else return t-'a'+36;//小写字母
12 }
13 
14 char NumToStr(int t)//数字-->>>字符
15 {
16  if(t>=0&&t<=9)return (t+'0');
17  if(t>=10&&t<=35)return (t-10+'A');
18  else return (t-36+'a');
19 }
20 
21 void conversion(int old_base,int new_base,char t[],int len)
22 {
23      int div[N];//被除数
24      int ans[N];//
25      int res[N];//余数
26      int i,j,temp_len=len,temp,k=0,m;
27      memset(div,0,sizeof(div));
28      memset(ans,0,sizeof(ans));
29      memset(res,0,sizeof(res));
30     for(i=0;i<len;i++)
31         div[i]=StrToNum(t[i]);
32     while(temp_len>=1)//只要被除数不等于(长度>=1),就继续
33     {
34          temp=0;//余数
35          j=0;
36          while(j<temp_len)   
37            {         
38               temp=temp*old_base+div[j];        
39                ans[j]=temp/new_base;  
40                temp%=new_base; 
41                j++;
42            } 
43           res[k++]=temp; 
44           j=0;
45     while(j<temp_len&&ans[j]==0) j++; //去除前导零  
46     memset(div,0,sizeof(div));  
47      for(i=j,m=0;i<temp_len;i++)  //商变成新的被除数       
48          div[m++]=ans[i];  
49          temp_len=m;
50     memset(ans,0,sizeof(ans));//清空商
51     }
52     for(i=k-1;i>=0;i--)
53         cout<<NumToStr(res[i]);
54     cout<<endl;
55 }
56 int main()
57 {
58   int i,test,base_a,base_b,len;
59   char temp[N];
60   cin>>test;
61   while(test--)
62   {
63     memset(temp,0,sizeof(temp));
64     scanf("%d%d%s",&base_a,&base_b,temp);
65     len=strlen(temp);
66     cout<<base_a<<" ";
67     for(i=0;i<len;i++)
68     cout<<temp[i];
69     cout<<endl;
70     cout<<base_b<<" ";
71     conversion(base_a,base_b,temp,len);
72   }
73 return 0;
74 }

 

 

 

posted on 2012-07-24 21:18  L_S_X  阅读(6647)  评论(0编辑  收藏  举报

导航