1. 程式人生 > >藍橋杯十六進位制轉八進位制

藍橋杯十六進位制轉八進位制

問題描述
  給定n個十六進位制正整數,輸出它們對應的八進位制數。

輸入格式
  輸入的第一行為一個正整數n (1<=n<=10)。
  接下來n行,每行一個由0~9、大寫字母A~F組成的字串,表示要轉換的十六進位制正整數,每個十六進位制數長度不超過100000。

輸出格式
  輸出n行,每行為輸入對應的八進位制正整數。

  【注意
  輸入的十六進位制數不會有前導0,比如012A。
  輸出的八進位制數也不能有前導0。

樣例輸入
  2
  39
  123ABC

樣例輸出
  71
  4435274

  提示
  先將十六進位制數轉換成某進位制數,再由某進位制數轉換成八進位制。

#include<iostream>
#include
<cmath> #include<vector> #include<set> #include<cstring> #include<string> #include<algorithm> using namespace std; int main() { int n; string str1; string str; int k=0; int l=0; int num=0; int v; scanf("%d",&n); while(n--){ cin
>>str1; str=""; for(int i=0;i<str1.length();i++){ switch(str1[i]){ case '0':str+="0000";break; case '1':str+="0001";break; case '2':str+="0010";break; case '3':str+="0011";break; case '4':str+="0100";break
; case '5':str+="0101";break; case '6':str+="0110";break; case '7':str+="0111";break; case '8':str+="1000";break; case '9':str+="1001";break; case 'A':str+="1010";break; case 'B':str+="1011";break; case 'C':str+="1100";break; case 'D':str+="1101";break; case 'E':str+="1110";break; case 'F':str+="1111";break; } } if(str.length()%3==1){ str = "00"+str; }else if(str.length()%3==2){ str = "0"+str; } int flag=0; int num = 0; for(int i=0;i<str.length();i+=3){ num = (str[i]-'0')*4+(str[i+1]-'0')*2+(str[i+2]-'0'); if(num){ flag=1; } if(flag){ printf("%d",num); } } printf("\n"); } return 0; }

還是寫的比較簡單的= =,雖然借鑑了別人的思路。。。。。。