zoukankan      html  css  js  c++  java
  • 十六进制转八进制

    题目

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

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

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

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

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

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

    代码:

    #include <iostream>
    #include <string>
    #include <cstdio> 
    using namespace std;
    int a[2000010];
    int main()
    {
    	string s1,s2;
    	int n,i,k,m,j;
    	cin>>n;
    	for(m=0;m<n;m++)
    	{
    		k=1;
    		j=0;
    		cin>>s1;	
    		s2="";
    		for(i=0;i<s1.length();i++)
    		{	
    			switch(s1[i])
    			{
    				case '0':s2+="0000";break;
    				case '1':s2+="0001";break;
    				case '2':s2+="0010";break;
    				case '3':s2+="0011";break;
    				case '4':s2+="0100";break;
    				case '5':s2+="0101";break;
    				case '6':s2+="0110";break;
    				case '7':s2+="0111";break;
    				case '8':s2+="1000";break;
    				case '9':s2+="1001";break;
    				case 'A':s2+="1010";break;
    				case 'B':s2+="1011";break;
    				case 'C':s2+="1100";break;
    				case 'D':s2+="1101";break;
    				case 'E':s2+="1110";break;
    				case 'F' :s2+="1111";break; 
    				default:break;
    			}
    		}
    		if(s2.length()%3==1)
    		{
    			j=(s2[0]-'0');
    			a[0]=j;
    			for(i=1;i<s2.length();i+=3)
    			{
    				j=(s2[i]-'0')*4+(s2[i+1]-'0')*2+(s2[i+2]-'0');
    				a[k++]=j;
    			}
    		}
    		else if(s2.length()%3==2)
    		{
    			j=(s2[0]-'0')*2+(s2[1]-'0');
    			a[0]=j;
    			for(i=2;i<s2.length();i+=3)
    			{
    				j=(s2[i]-'0')*4+(s2[i+1]-'0')*2+(s2[i+2]-'0');
    				a[k++]=j;
    			}
    		}
    		else
    		{
    			k=0;
    			for(i=0;i<s2.length();i+=3)
    			{
    				j=(s2[i]-'0')*4+(s2[i+1]-'0')*2+(s2[i+2]-'0');
    				a[k++]=j;
    			}	
    		}
    		if(a[0]==0) i=1;
    		else i=0;
    		for(i;i<k;i++)
    		{
    			cout<<a[i];
    		}
    		cout<<endl;
    	}	
    	return 0;
    } 
  • 相关阅读:
    HDU 2888 Check Corners (模板题)【二维RMQ】
    POJ 3264 Balanced Lineup(模板题)【RMQ】
    poj 3368 Frequent values(经典)【RMQ】
    SPOJ RPLN (模板题)(ST算法)【RMQ】
    UVA 796 Critical Links(模板题)(无向图求桥)
    UVA 315 Network (模板题)(无向图求割点)
    POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
    poj 3067 Japan 【树状数组】
    POJ 2481 Cows 【树状数组】
    POJ 1195 Mobile phones【二维树状数组】
  • 原文地址:https://www.cnblogs.com/cnlik/p/11851848.html
Copyright © 2011-2022 走看看