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

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

 

你可能感兴趣的:(十六进制)