33,007
社区成员
发帖
与我相关
我的任务
分享
string compressId(const string& id)
{
int num, i, k = 0, tmp;
string compressed(12, ' ');//预留12个字符的空间
for(i = 0; i < 15; i += 3){
num = (id[i]-'0')*100 + (id[i+1]-'0')*10 + (id[i+2]-'0');
tmp = num/36;
num %= 36;
compressed[k++] = tmp > 9 ? tmp-10+'a' : tmp+'0';//36进制数的高位
compressed[k++] = num > 9 ? num-10+'a' : num+'0';//36进制数的低位
}
compressed[10] = id[15];
compressed[11] = id[16];
return compressed;
}
string retrieveId(const string& compressed)
{
int num, i, k = 0;
string id(17, ' ');//预留17个字符的空间
for(i = 0; i < 10; i += 2){
num = (compressed[i] > '9' ? compressed[i]-'a'+10 : compressed[i]-'0') * 36 +
(compressed[i+1] > '9' ? compressed[i+1]-'a'+10 : compressed[i+1]-'0');
id[k++] = num/100 + '0';//10进制数的百位
num %= 100;
id[k++] = num/10 + '0';//10进制数的十位
num %= 10;
id[k++] = num + '0';//10进制数的个位
}
id[15] = compressed[10];
id[16] = compressed[11];
return id;
}