1. a是要转换的数,bit是原本的进制(2——36)
2. 因为a是(2-36)进制,故要用数组存储要转换的数字,结果返回整型的十进制数。
3. 用数组a存储要转换的数字,便于一位位的处理,可以考虑要转换的每一位的范围是:0-9或A-Z,类型为char,
例如:数组中D表示13,需要通过‘D-’’A‘+10计算得来。数组中’8‘,需要通过’8‘-’0‘来获得。
4. 最需要注意的是:进制转换要从低位开始,乘以其相应进制位的倍数关系。故在计算过程中,需要一个变量记录当前位是进制的多 少倍(从右到左,即1,bit,bit*bit,bit*bit*bit,。。。)
5. 注意在转换前,都把原始数据转化成了字符串(使用sprintf函数),具有一般性
1 #include <iostream> 2 using namespace std; 3 4 long toTen(char a[], int bit) 5 { 6 int length = strlen(a); 7 int i, b=1,sum=0; //i要做数组a的下标,注意其起止范围 8 for(i=length-1;i>=0;i-- ) 9 { 10 if(a[i]>='A') 11 { 12 sum += (a[i]-'A'+10) *b; 13 b *= bit; 14 } 15 else 16 { 17 sum += (a[i]-'0') *b; 18 b *= bit; 19 } 20 } 21 return sum; 22 } 23 24 int main() 25 { 26 int aNum; 27 char bNum[20] ; 28 29 cin>>aNum; 30 sprintf(bNum,"%d",aNum); 31 cout<<toTen(bNum,9) <<endl; 32 33 cin>>bNum; 34 cout<<toTen(bNum,16) <<endl; 35 system("pause"); 36 }