题目

给定一个二进制字符串 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;
    }
};