十二进制的处理

hust上机题

题目描述:

输入一个仅含有十二进制数字的字符串(字母一律小写,不超过八个字符)

完成以下任务

1、输出该十二进制数每一位对应的十进制数(从高位到低位顺序输出,空格隔开);

2、实现十二进制转十进制的算法,输出该是二进制数对应的十进制数

3、输出转换后的十进制数在内存中的每个二进制位。

 

思想:

1、对于每个字符逐个进行分析

2、从低位往高位算(注意,数据存储的时候高位反而存的事低位的数,下标要先挪到数组最高位再倒着计算),对于每个字符先转为十进制数,再乘以12的对应权值幂次方;累加即可

3、对于2的结果,先建立一个32位的数组,初始化数组为0,下标挪到数组最高位倒着一边余2一边保存余数到数组中。注意当停止/2操作时还有一个余数,也要一并保存数组当中。

代码实现:

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 int dozenchartodecem(char c)
 5 {
 6     int result=-1;
 7     if(c>'0'&&c<='9')
 8         {
 9             result =c-'0';
10         }
11         else if(c=='a')
12         {
13             result =10;
14         }
15         else if(c=='b') result=11;
16         return result;
17 }
18 
19 int main()
20 {
21     char num[100];
22     cout<<"请输入十二进制数"<<endl;
23     cin>>num;
24 
25     //把十二进制数改十进制
26     int result=-1,i=0;
27     int sum=0,weight=0;
28     while(num[i]!='\0')
29     {
30         cout<<dozenchartodecem(num[i])<<" ";
31         i++;
32     }
33     i=0;
34     while(num[i]!='\0')i++;//由于计算要从低位到高位计算,要把i移到字符串末尾
35     i--;//i回退一位
36     while(i>=0){//逐位进行计算
37             sum=sum+dozenchartodecem(num[i])*pow(12,weight);
38         weight++;
39         i--;
40     }
41     cout<<endl;
42     cout<<sum<<endl;
43     //十进制数在内存中的每个二进制位
44 
45     int bin[32];
46 
47     for(i=0;i<32;i++)
48         bin[i]=0;
49     i=31;
50     while(sum/2!=0){
51         bin[i]=sum%2;
52         sum/=2;
53         i--;
54     }
55     //还剩最后一个余数要处理***
56     bin[i]=sum;
57     for(i=0;i<32;i++)
58     {
59         cout<<bin[i];
60         if((i+1)%8==0){
61             cout<<' ';
62         }
63     }
64     cout<<endl;
65 
66     return 0;
67 }

 

posted @ 2019-02-21 22:16  -DP-  阅读(509)  评论(0编辑  收藏  举报