昨天做了华为笔试,题目记不清了,先把代码记录一下:
测试用例:
3 //输入个数
0X62 0X80 0X00 //01100010,10000000,00000000
2
4 //0110
5 //00101
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;
string b[]={"0000","0001","0010","0011","0100","0101","0110","0111","1000",
"1001","1010","1011","1100","1101","1110","1111"};
string find_b(string s){
string ss;
ss+=b[s[2]-'0'];
ss+=b[s[3]-'0'];
return ss;
}
int main(){
int n;
cin>>n;
vector<string> value;
for(int i=0;i<n;i++){
string s;
cin>>s;
value.push_back(s);
}
int num; //解析个数
cin>>num;
int start=0;
vector<int> final;
string res;
int nn[num];
for(int i=0;i<num;i++)
cin>>nn[i];
for(int i=0;i<num;i++){
int len;
len=nn[i];
for(int j=0;j<n;j++){
res+=find_b(value[j]);
}
string ans=res.substr(start,len);
int result=0;
for(int j=len-1;j>=0;j--)
result+=(ans[j]-'0')*pow(2,len-1-j);
final.push_back(result);
start+=len;
}
for(int i=0;i<final.size();i++)
cout<<final[i]<<endl;
return 0;
}