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]!='