注:在20个二进制位的意义下进行。
本人二进制右移代码:
vector<int> tow;
inline void get_tow(int num){
if(num==0)return;
tow.push_back(num%2);
get_tow(num/2);
return;
}
inline long long get_num(){
long long tmp=0;
for(int i=0;i<tow.size();i++){
if(tow[i])tmp+=tow_num[i];
}
return tmp;
}
inline long long opt_1(int num,long long val){
tow.clear();
get_tow(num);
while(tow.size()<20)tow.push_back(0);
for(int i=0;i<val;i++){
tow.push_back(tow[0]);
tow.erase(tow.begin());
}
return get_num();
}
请问还有更优解吗?