1. 程式人生 > >p1102 十六進位制轉八進位制

p1102 十六進位制轉八進位制

題目

描述 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; }