【牛客编程巅峰赛S1第6场】循环右移
循环右移
https://ac.nowcoder.com/acm/problem/208128
题目
给定一个二进制字符串 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; } };