zcmu-2158

2158: G.ly的进制转换

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 77   Solved: 29
[ Submit][ Status][ Web Board]

Description

ly去年有门课叫C语言基础,今年的期末考试上有一道题目是"将16进制的数字39转换成八进制",但是ly并不会算...
在去年考完试之后,发奋学习,并且只学习怎么把16进制的数字转换成八进制...
今年的java考试刚好也有这个问题,但是ly缺忘了怎么算...所以你能帮她吗?

Input

多组数据,第一行一个正整数T表示有T次询问(T<=10)
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数
每个十六进制数长度不超过100000。

Output

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

Sample Input

139

Sample Output

71

HINT

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

解析:16进制每个数为4个2进制为,8进制每个数位3个2进制位。所以就可以得到我们先求出16进制的全部2进制位,然后每3个数合成一个8进制位。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
char a[17]="0123456789ABCDEF";
int main()
{
	char s[maxn];
	int t;scanf("%d",&t);
	while(t--)
	{
		scanf("%s",s);
		int l=strlen(s);
		int len=l*4%3;
		string ss;
		if(len==0)ss+="";
		else if(len==1)ss+="00";
		else ss+="0";
		//cout<<ss<<endl;
		for(int i=0; i<l; i++)
		{
			switch(s[i])
			{
				case '0':ss+="0000";break;
				case '1':ss+="0001";break;
				case '2':ss+="0010";break;
				case '3':ss+="0011";break;
				case '4':ss+="0100";break;
				case '5':ss+="0101";break;
				case '6':ss+="0110";break;
				case '7':ss+="0111";break;
				case '8':ss+="1000";break;
				case '9':ss+="1001";break;
				case 'A':ss+="1010";break;
				case 'B':ss+="1011";break;
				case 'C':ss+="1100";break;
				case 'D':ss+="1101";break;
				case 'E':ss+="1110";break;
				case 'F':ss+="1111";break;
				//default :break;
			}
		}
		for(int i=0; i<ss.length(); i+=3)
		{
			if(ss[i]=='0'&&ss[i+1]=='0'&&ss[i+2]=='0')
			{
				if(i==0)continue;
				else printf("0");
			}
			else if(ss[i]=='0'&&ss[i+1]=='0'&&ss[i+2]=='1')printf("1");
			else if(ss[i]=='0'&&ss[i+1]=='1'&&ss[i+2]=='0')printf("2");
			else if(ss[i]=='0'&&ss[i+1]=='1'&&ss[i+2]=='1')printf("3");
			else if(ss[i]=='1'&&ss[i+1]=='0'&&ss[i+2]=='0')printf("4");
			else if(ss[i]=='1'&&ss[i+1]=='0'&&ss[i+2]=='1')printf("5");
			else if(ss[i]=='1'&&ss[i+1]=='1'&&ss[i+2]=='0')printf("6");
			else if(ss[i]=='1'&&ss[i+1]=='1'&&ss[i+2]=='1')printf("7");
		}
		puts("");
		
	}
	return 0;	
}


猜你喜欢

转载自blog.csdn.net/yu121380/article/details/80932530
今日推荐