为什么只能过80%样例啊?求!!!

class Solution {
public:
    /**
     * 位移后二进制串的十进制值
     * @param str string字符串 二进制字符串
     * @param k int整型 循环位移次数
     * @return long长整型
     */ 
    long long rotateRight(string str, int k) {
        //string str1=str+str;
        int a[100][2]={0};
        int j=0,z=0;
        for(int i=0;i<str.size();i++)
        {
            if(str[i]=='0')
            {
                a[j][0]=i;
                j++;
            }
            else
            {
                a[z][1]=i;
                z++;
            }
        }
        j=0,z=0;
       str1=str;
        for(int i=0;i<str.size();i++)// write code here
        {
            if(str[i]=='0')
            {
                str1[i]=str[(a[j][0]-k+str.size())%str.size()];
                j++;
            }
            else
            {
                str1[i]=str[(a[z][1]-k+str.size())%str.size()];
                z++;
            }
        }
        //cout<<str<<endl;
        long long ans=0;
        //long long len=str1.size();
        for(int i=0;i<str.size();i++)
        {
            if(str1[i]=='1')
            ans+=pow(2,str.size()-i-1);
        }
        return ans;
    }
    private:
        string str1;
};
全部评论
精度问题 用 powl
1 回复 分享
发布于 2020-07-26 14:00
pow是double类型的,它转为longlong类型的会有精度损失,"11001000010010101011110111110000110100001110000011011001",21。例如这组你的答案就不对了
1 回复 分享
发布于 2020-07-26 13:11

相关推荐

嗨害嗨我来了:感谢我吧,上次我在食堂敲打了一个姓雷的,他说马上给大学生们准备hc
不卡学历的大厂有哪些?
点赞 评论 收藏
分享
湫湫湫不会java:把学校不小心打错一个字就乱杀了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务