#include<iostream>
#include<stack>
#include<map>
using namespace std;
// 存储16进制 对应的二进制关系,直接赋值过mm["0001"] = "1" 这种方式linux过不去,window可以
map<string,string> mm = {
{"0000", "0"},
{"0001", "1"},
{"0010", "2"},
{"0011", "3"},
{"0100", "4"},
{"0101", "5"},
{"0110", "6"},
{"0111", "7"},
{"1000", "8"},
{"1001", "9"},
{"1010", "A"},
{"1011", "B"},
{"1100", "C"},
{"1101", "D"},
{"1110", "E"},
{"1111", "F"}
};
long long word,ys;// 接收要存储的数据
string binary="";// 用于存储对应的二进制数
bool f = false;
stack<string> sk;// 用于存储最终转化之后的每个位置的结果
string toSix(string w){// 转化成16进制操作
// 4合一处理
string one = w.substr(0,4);
string two = w.substr(4,4);
cout<<mm[one]<<mm[two]<<" ";
}
int main(){
cin>>word;
// 短除法进行获取word对应的二进制数
while(word){
f = true;
ys = word%2;// 此时的余数
binary += to_string(ys);
word /= 2;
}
if(f){
long long dataSize = binary.size();// 获取长度查看第几组才是最后一组
long long lastTeam ;
if(dataSize%7 == 0){
lastTeam = dataSize/7-1;
}else{
lastTeam = dataSize/7;
}
string tmpres = "";
long long team = 0;// 用于记录组数
for(long long i=0;i<dataSize;++i){
if(i%7 == 0 && i!=0){
tmpres = "1"+tmpres;
toSix(tmpres);
tmpres = binary[i];
team++;
}else{
tmpres = binary[i]+tmpres;
}
}
// 最后最高位可能不足7位
// 不足7位数进行补0
long long diffSize = tmpres.size();
for(long long i=1;i<=7-diffSize;++i){
tmpres = "0"+tmpres;
}
tmpres = "0"+tmpres;// 最后一位补0
toSix(tmpres);
}else{
cout<<"00";
}
return 0;
}
Subtask #1过了但是Subtask #0全是re