基础练习 十六进制转八进制

http://lx.lanqiao.org/problem.page?gpid=T51
基础练习 十六进制转八进制  
时间限制:1.0s   内存限制:512.0MB
      
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
  输出n行,每行为输入对应的八进制正整数。
注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。
 
分析:
 
直接模拟进制转换即可、
 
AC代码:
 
 1 #include<iostream> 
 2     #include<cstdio>  
 3     #include<cstring>  
 4     using namespace std;  
 5     char s[100010];  
 6     int change(int m,int n)  
 7     {  
 8         int res=0;  
 9         for(int i = m; i <= n; i++)  
10         if(s[i]>'9') res = res * 16 + s[i] - 'A' + 10;  
11         else res = res*16 + s[i] -'0';  
12         return res;  
13     }  
14     int main()  
15     {  
16         int n,i;  
17         cin>>n;  
18         while(n--)  
19         {  
20             scanf("%s",s);  
21             int len = strlen( s ) ;  
22             int index=0;  
23             bool flag = true;  
24             if(len % 3 == 1)  
25             printf("%o",change(0,0)), flag = false,index = 1;  
26             if(len % 3 == 2)  
27             printf("%o",change(0,1)), flag = false,index = 2;  
28             for(i = index; i < len; i+=3)  
29             {  
30                 if(flag)  
31                 {  
32                     flag = false;  
33                     printf("%o",change(i,i+2));  
34                 }  
35                 else  
36                 {  
37                     printf("%04o",change(i,i+2));  
38                 }  
39             }  
40             cout<<endl;  
41         }  
42         return 0;  
43     }
View Code
原文地址:https://www.cnblogs.com/jeff-wgc/p/4450215.html