题目
给定一个二进制字符串 str,把字符串循环右移 k 位,然后得到一个新的二进制数,返回这个数的十进制值。
解题思路
将字符串 str 循环右移 k 位,相当于将 str 后面 k 个字符截断并将其加到字符串前面。
对得到的字符串使用按权相加法从二进制转十进制。
C++代码
class Solution {
public:
/**
* 位移后二进制串的十进制值
* @param str string字符串 二进制字符串
* @param k int整型 循环位移次数
* @return long长整型
*/
long long rotateRight(string str, int k) {
// write code here
int n = str.size();
k %= n;
string tmp = str.substr(n-k, k);
str = tmp + str;
str = str.substr(0, n);
long long ans = 0;
for(int i=0; i<n; ++i){
int a = str[i] - '0';
ans <<= 1;
ans += a;
}
return ans;
}
}; 
京公网安备 11010502036488号