有一个二进制数的字符串,想把字符串循环右移k位,然后得到一个新的二进制数,求这个数的十进制值是多少。给定一个二进制字符串str和循环位移位数k,返回循环后的二进制数的十进制值。
import java.util.*;
public class Solution {
/**
* 位移后二进制串的十进制值
* @param str string字符串 二进制字符串
* @param k int整型 循环位移次数
* @return long长整型
*/
public long rotateRight(String str, int k) {
// write code here
if (k > str.length()) {
k = k % str.length();
}
String head = str.substring(str.length() - k);
String tail = str.substring(0, str.length() - k);
str = head + tail;
return Long.parseLong(str, 2);
}
} public long rotateRight (String str, int k) {
StringBuilder sb = new StringBuilder(str);
int len = str.length();
for (int i = 0; i < k; i++) {
char end = sb.charAt(len - 1);
sb.insert(0, end);
sb.deleteCharAt(sb.length() - 1);
}
String res = sb.toString();
len = res.length();
BigDecimal total = new BigDecimal("0");
for (int i = 0; i < len; i++) {
total = total.add(new BigDecimal(Integer.parseInt(String.valueOf(res.charAt(i))) * Math.pow(2, len - 1 - i) + ""));
}
return total.longValue();
} public long rotateRight (String str, int k) {
// write code here
StringBuffer s=new StringBuffer(str);
for(int i=0;i<k;i++){
char s1=s.charAt(str.length()-1);
s.deleteCharAt(str.length()-1);
s.insert(0,s1);
}
long z=0;
int j=0;
while(s.length()>0){
int zzz=s.charAt(s.length()-1)-'0';
long zz=(long)Math.pow(2,j)*zzz;
z+=zz;
j++;
s.deleteCharAt(s.length()-1);
}
return z;
} long long rotateRight(string str, int k) {
// write code here
int size=str.size();
k=k%size;
string cpy;
for(int i=size-k;i<size;++i){
cpy+=str[i];
}
for(int i=0;i<size-k;++i){
cpy+=str[i];
}
long long x=1;
long long num=0;
for(int i=size-1;i>=0;--i){
num+=(cpy[i]-'0')*x;
x*=2;
}
return num;
}
贡献一个C++版本的 class Solution: def rotateRight(self, str, k): str = str[len(str)-k:len(str)]+str[0:len(str)-k] return int(str, 2)