資源限制
時間限制:1.0s 記憶體限制:512.0mb
問題描述
給定n個十六進製制正整數,輸出它們對應的八進位制數。
輸入格式
輸入的第一行為乙個正整數n (1<=n<=10)。
接下來n行,每行乙個由0 ~ 9、大寫字母a~f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進位制正整數。
【注意】
輸入的十六進製制數不會有前導0,比如012a。
輸出的八進位制數也不能有前導0。
樣例輸入239
123abc
樣例輸出
714435274
【提示】
先將十六進製制數轉換成某進製數,再由某進製數轉換成八進位制。
思路:
先把十六進製制數轉換成二進位制數,然後再把二進位制數轉換成八進位制數:
十六進製制——>二進位制——>八進位制
(1)將十六進製制轉換為二進位制方法:
取一分四法,即將一位十六進製制數分解成四位二進位制數,用四位二進位制按權相加去湊這位十六進製制數,小數點位置照舊。
(2) 將八進位制轉換為二進位制方法:
取一分三法,即將一位八進位制數分解成三位二進位制數,用三位二進位制按權相加去湊這位八進位制數
完整**:
#include
#include
using
namespace std;
string a;
//輸入的十六進製制數
string b;
//轉換的二進位制數
intmain()
}//補0 八進位制是3個二進位制一組,所以要考慮這種情況
int num=0;
//輸出的八進位制數
int lenb=b.
size()
;int flag=0;
if(lenb%3==
1)if(lenb%3==
2)//二進位制轉換八進位制
for(
int i=
0;i) cout<}return0;
}
這個是我最開始想的:先把十六進製制數轉換成十進位制,再把十進位制數轉換成八進位制數。但是錯了,每個樣例都是錯的,但是題目給的樣例是對的。
因為我是先做到十進位制轉換成十六進製制和十六進製制轉換為十進位制數。所以下意識的就想到了這種方法:
十六進製制——>十進位制——>到任意進製。
十六進製制轉十進位制
十進位制轉十六進製制
#include
#include
#include
#include
using
namespace std;
char s[
100000];
int a[
100000];
char b[
100000];
intmain()
else
num+
=a[i]
*pow(16
,len-
1-i);}
int c=0;
while
(num)
//十進位制數轉換成八進位制數
for(
int i=c-
1;i>=
0;i--
)else
}printf
("\n");
}return0;
}
不知道**出錯了,希望知道的大佬希望可以指點一二。
基礎練習 十六進製制轉八進
問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。輸出格式 輸入的十六進製制數不會有前導0,比如012a。樣例...
藍橋杯練習 基礎練習 十六進製制轉八進位制
題目鏈結 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由09 大寫字母af組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。輸出格...
藍橋杯 基礎練習 十六進製制轉八進位制
問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。輸出格式 輸出n行,每行為輸入對應的八進位制正整數。注意 輸...