d167 - 編碼轉譯
題目描述
題目要求將輸入的字串轉換成一種特殊的編碼形式,其中每個字元被轉換成一個由 'o' 和 ' ' 組成的 8 位元字串,並在中間插入一個 '.' 作為分隔符。
解題思路
程式碼的核心邏輯是將每個字元的 ASCII 值轉換為二進制表示,然後用 'o' 代表 1,用 ' ' 代表 0。由於題目要求的輸出格式,程式碼將二進制字串分成兩部分,中間插入 '.'。
程式首先讀取輸入字串,然後對字串中的每個字元進行處理。對於每個字元,程式將其 ASCII 值轉換為二進制表示,並將二進制位儲存在 aa 陣列中。最後,程式按照題目要求的格式輸出編碼後的字串,並在每個字元之間加上 '|' 和 '__________' 作為分隔符。
複雜度分析
- 時間複雜度: O(n*8),其中 n 是輸入字串的長度。因為需要遍歷字串中的每個字元,並對每個字元進行 8 次的位元操作。
- 空間複雜度: O(1),因為程式只使用了固定大小的陣列
aa,其大小為 8。
程式碼
#include <iostream>
using namespace std;
int main(){
string a;
char aa[8];
while(getline(cin,a)){
cout << "___________\n";
a+='\n';
int al=a.length();
for(int it=0;it<al;++it){
cout << "|";
int b=a[it];
for(int i=0;i<8;++i){
if(b%2)
aa[i]='o';
else
aa[i]=' ';
b/=2;
}
for(int i=7;i>=0;--i){
cout << aa[i];
if(i==3)cout << ".";
}
cout << "|\n";
}
cout << "___________\n";
}
}