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


    基础练习 十六进制转八进制  
    时间限制:1.0s   内存限制:512.0MB
    问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。
    输入格式
      输入的第一行为一个正整数n (1<=n<=10)。
      接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
    输出格式
      输出n行,每行为输入对应的八进制正整数。
    注意
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。
    样例输入
    2
    39
    123ABC
    样例输出
    71
    4435274
    提示
      先将十六进制数转换成某进制数,再由某进制数转换成八进制。


    <pre name="code" class="cpp">#include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char s[100100]; 
    int num[500010];
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%s",s);
    		int l=strlen(s);
    		int j=0;
    		for(int i=l-1;i>=0;i--)
    		{
    			if(s[i]=='A')
    			{
    				num[j++]=0,num[j++]=1;
    				num[j++]=0,num[j++]=1;
    			}
    			else if(s[i]=='B')
    			{
    				num[j++]=1,num[j++]=1;
    				num[j++]=0,num[j++]=1;
    			}
    			else if(s[i]=='C')
    			{
    				num[j++]=0,num[j++]=0;
    				num[j++]=1,num[j++]=1;
    			}
    			else if(s[i]=='D')
    			{
    				num[j++]=1,num[j++]=0;
    				num[j++]=1,num[j++]=1;
    			}
    			else if(s[i]=='E')
    			{
    				num[j++]=0,num[j++]=1;
    				num[j++]=1,num[j++]=1;
    			}
    			else if(s[i]=='F')
    			{
    				num[j++]=1,num[j++]=1;
    				num[j++]=1,num[j++]=1;
    			}
    			else
    			{
    				int g=j;
    				int n=s[i]-'0';
    				while(n)
    				{
    					num[j++]=n%2;
    					n=n/2;
    				}
    				j=g+4;
    			}
    		}
    		int e,d,h=0;
    		for(int i=0;i<j;i+=3)
    		{
    			d=1;int n=0;
    			for(e=i;e<i+3;e++)
    			{
    				n+=num[e]*d;
    				d*=2;
    			}
    			num[h++]=n;
    		}
    		int k;
    		for(k=h-1;k>=0;k--)
    		if(num[k]!=0) 
    		break;
    		for(int i=k;i>=0;--i)
    		printf("%d",num[i]);
    		printf("
    ");
    		memset(num,0,sizeof(num));
    		memset(s,'',sizeof(s)); 
    	}
    	return 0;
    }


    
    
  • 相关阅读:
    PHP函数正则表达式函数
    PHP函数变量函数
    Passing Wpf Objects Between Threads (With Source Code)
    分手后,何必再要做朋友?
    享受爱,给予爱
    人生如戏
    深夜电话
    我们也要在不同的事情上面有不同的哲学的情况,才行
    幸 福
    你的平安夜是这样过的吗?
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273611.html
Copyright © 2020-2023  润新知