版权声明: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;
}