p1102 十六进制转八进制

版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84438927

题目

描述 Description
输入一个不超过100,000位的16进制数,请转换成8进制数。

注:16进制数中,字母0-9还对应表示数字0-9,字母"A"(大写)表示10,"B"表示11,…"F"表示15.
比如:16进制数A10B表示的10进制数是:1016^3 + 116^2 + 016^1 + 1116^0 = 41227. 转换成的8进制数是:
120413 :因为 18^5 + 28^4 + 08^3 + 48^2 + 18^1 + 38^0 = 41227.

提示:考虑它们与2进制表示的关系。
输入格式 Input Format
一行,一个16进制数。没有前导0(除非是数字0)
输出格式 Output Format
一个8进制数。没有前导0(除非是数字0)
样例输入 Sample Input

123ABC
样例输出 Sample Output

4435274
时间限制 Time Limitation
1s
注释 Hint

来源 Source
usaco 月赛 hex

代码

#include<iostream>
#include<string>
using namespace std;
string a;
string num,m,n;
int main()
{
	cin>>num;
	if(num=="0") {cout<<0;return 0;}
	for(int i=0;i<=num.size()-1;i++)
	{
		if(num[i]=='0')
			n=n+"0000";
		if(num[i]=='1')
			n=n+"0001";
		if(num[i]=='2')
			n=n+"0010";
		if(num[i]=='3')
			n=n+"0011";
		if(num[i]=='4')
			n=n+"0100";
		if(num[i]=='5')
			n=n+"0101";
		if(num[i]=='6')
			n=n+"0110";
		if(num[i]=='7')
			n=n+"0111";
		if(num[i]=='8')
			n=n+"1000";
		if(num[i]=='9')
			n=n+"1001";
		if(num[i]=='A')
			n=n+"1010";
		if(num[i]=='B')
			n=n+"1011";
		if(num[i]=='C')
			n=n+"1100";
		if(num[i]=='D')
			n=n+"1101";
		if(num[i]=='E')
			n=n+"1110";
		if(num[i]=='F')
			n=n+"1111";
	}
	int x=num.size()*4;
		/*cout<<n;
	printf("\n");*/
	if(x%3==1)
	{
		x+=2;
		n="00"+n;
	}
	if(x%3==2)
	{
		x+=1;
		n='0'+n;
	}
	for(int i=1;i<=x-2;i=i+3)
	{
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==0)
			m=m+'0';
			//cout<<0<<' '<<i<<endl;
    		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==1)
			m=m+'1';
			//cout<<1<<' '<<i<<endl;
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==10)
			m=m+'2';
			//cout<<2<<' '<<i<<endl;
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==11)
			m=m+'3';
			//cout<<3<<' '<<i<<endl;
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==100)
			m=m+'4';
			//cout<<4<<' '<<i<<endl;
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==101)
			m=m+'5';
			//cout<<5<<' '<<i<<endl;
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==110)
			m=m+'6';
			//cout<<6<<' '<<i<<endl;
		if((n[i]-'0')*10+(n[i+1]-'0')+(n[i-1]-'0')*100==111)
			m=m+'7';
			//cout<<7<<' '<<i<<endl;
	}
	int h=0;
	while(m[h]=='0')
		h++;
	for(int i=h;i<=m.size()-1;i++)
	{
		cout<<m[i];
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/huashuimu2003/article/details/84438927