码迷,mamicode.com
首页 > 其他好文 > 详细

BASIC-12 十六进制转八进制

时间:2018-02-26 23:11:02      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:can   scanf   amp   break   ret   解决   输入   tor   计算方法   

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

解题思路:由输入的格式长度决定无法通过整数型变量进行运算,而提示给出先转换进制,首先想到十六进制和八进制对于二进制都有很方便的计算方法,由此为思路解决。

  1 #include<cstdio>
  2 #include<string>
  3 #include<vector>
  4 using namespace std;
  5 
  6 int main(void)
  7 {
  8     int n;
  9     char c;
 10     scanf("%d", &n);
 11     for(int i = 0; i < n; i++){
 12         vector<char> s1;
 13         int count = 0;
 14         while(scanf("%c", &c) == 1 && c == \n);
 15         while(c != \n){
 16             s1.push_back(c);
 17             count++;
 18             scanf("%c", &c);
 19         }
 20         
 21         if(s1[0] == 0){
 22             printf("0\n");
 23             continue;
 24         }
 25         vector<char>::iterator it;
 26         vector<char> s2; 
 27         for(it = s1.begin(); it != s1.end(); it++){
 28             switch(*it){
 29                 case 0:{
 30                     s2.push_back(0);s2.push_back(0);
 31                     s2.push_back(0);s2.push_back(0);
 32                     break;
 33                 }
 34                 case 1:{
 35                     s2.push_back(0);s2.push_back(0);
 36                     s2.push_back(0);s2.push_back(1);
 37                     break;
 38                 }
 39                 case 2:{
 40                     s2.push_back(0);s2.push_back(0);
 41                     s2.push_back(1);s2.push_back(0);
 42                     break;
 43                 }
 44                 case 3:{
 45                     s2.push_back(0);s2.push_back(0);
 46                     s2.push_back(1);s2.push_back(1);
 47                     break;
 48                 }
 49                 case 4:{
 50                     s2.push_back(0);s2.push_back(1);
 51                     s2.push_back(0);s2.push_back(0);
 52                     break;
 53                 }
 54                 case 5:{
 55                     s2.push_back(0);s2.push_back(1);
 56                     s2.push_back(0);s2.push_back(1);
 57                     break;
 58                 }
 59                 case 6:{
 60                     s2.push_back(0);s2.push_back(1);
 61                     s2.push_back(1);s2.push_back(0);
 62                     break;
 63                 }
 64                 case 7:{
 65                     s2.push_back(0);s2.push_back(1);
 66                     s2.push_back(1);s2.push_back(1);
 67                     break;
 68                 }
 69                 case 8:{
 70                     s2.push_back(1);s2.push_back(0);
 71                     s2.push_back(0);s2.push_back(0);
 72                     break;
 73                 }
 74                 case 9:{
 75                     s2.push_back(1);s2.push_back(0);
 76                     s2.push_back(0);s2.push_back(1);
 77                     break;
 78                 }
 79                 case A:{
 80                     s2.push_back(1);s2.push_back(0);
 81                     s2.push_back(1);s2.push_back(0);
 82                     break;
 83                 }
 84                 case B:{
 85                     s2.push_back(1);s2.push_back(0);
 86                     s2.push_back(1);s2.push_back(1);
 87                     break;
 88                 }
 89                 case C:{
 90                     s2.push_back(1);s2.push_back(1);
 91                     s2.push_back(0);s2.push_back(0);
 92                     break;
 93                 }
 94                 case D:{
 95                     s2.push_back(1);s2.push_back(1);
 96                     s2.push_back(0);s2.push_back(1);
 97                     break;
 98                 }
 99                 case E:{
100                     s2.push_back(1);s2.push_back(1);
101                     s2.push_back(1);s2.push_back(0);
102                     break;
103                 }
104                 case F:{
105                     s2.push_back(1);s2.push_back(1);
106                     s2.push_back(1);s2.push_back(1);
107                     break;
108                 }
109             }
110         }
111         
112         if((count * 4) % 3 == 1){
113             s2.insert(s2.begin(), 0);s2.insert(s2.begin(), 0);
114         }
115         else if((count * 4) % 3 == 2){
116             s2.insert(s2.begin(), 0);
117         }
118         
119         int first = 1;
120         for(it = s2.begin(); it != s2.end(); it += 3){
121             int re = (*it - 0) * 4 + (*(it + 1) - 0) * 2 + (*(it + 2) - 0);
122             if(first == 1){
123                 if(re == 0) continue;
124                 else{
125                     printf("%d", re);
126                     first = 0;
127                 }
128             }
129             else printf("%d", re);
130         }
131         printf("\n");
132     }
133     
134     
135     return 0;
136 }

 

BASIC-12 十六进制转八进制

标签:can   scanf   amp   break   ret   解决   输入   tor   计算方法   

原文地址:https://www.cnblogs.com/fatcatm/p/8476209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!