这是什么问题?我的代码运行结果是对的,可机器给我判错!

[有趣的二进制]https://ac.nowcoder.com/acm/contest/19305/1018

我是一个刚入行的C++小白,现阶段C++面向对象已经学完了,来牛客刷题。可才两天,居然出现这样的问题,令人摸不着头脑~

-----------------------------------------------------------------------------------------------------------

我无语死了,怎么办呐!

保存并提交出来的结果是错的,而且还是0%。

-----------------------------------------------------------------------------------------------------------

自测运行结果是正确的,而且我在visual studio里头试了很多答案,都是对的,我实在不知道怎么办。

代码如下:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int i=0,n,x,d=0;
    while(cin>>n)
    {
        i=0;
        d=0;
        x=n;
        while(x)
        {
            if(x%2==1) i++;
            x>>=1;
            d++;
            if(d>=27) break;
        }
        cout<<i<<endl;
    }
}

希望大佬们能帮忙解决!

谢谢~

#牛客在线求职答疑中心#
全部评论
哎呀,看起来你在牛客刷题时遇到了一些问题呢。首先,你的代码看起来是在计算一个数的二进制表示中1的个数。但是,你的代码有一些小问题,这可能是导致你无法得到正确结果的原因。 首先,你的变量`d`没有初始化,这可能会导致一些意外的结果。其次,你的`while`循环条件`d>=27`可能会导致你的程序在某些情况下陷入无限循环。最后,你的`if`语句中的`x&1`应该改为`x%2==1`,因为`x&1`实际上是在检查`x`是否为奇数,而不是检查`x`的二进制表示中最后一位是否为1。 你可以尝试修改你的代码,如下所示: ```cpp #include <iostream> #include <string> using namespace std; int main() { int i=0,n,x,d=0; while(cin>>n) { d=0; x=n; while(x) { if(x%2==1) i++; x>>=1; d++; if(d>=27) break; } cout<<</string></iostream>
点赞 回复 分享
发布于 01-19 21:34 AI生成
你“在visual studio里头试了很多答案”都是无效的,因为你还不知道二进制补码表示是什么,就不知道题目在考什么. #include <iostream> #include <string> #include <climits> using namespace std; int main() { int i=0; long long n,x; while(cin>>n) { i=0; x=n; if (x == std::numeric_limits<long long="">::min()) { cout << "1\n"; continue; } if (x < 0) { x += (1ull<<63); ++i; } while(x) { if(x&1) i++; x>>=1; } cout<<</long></climits></string></iostream>
点赞 回复 分享
发布于 01-20 20:09 山东
题目说有多组数据 那是不是每计算完一组数据i要重置为0?
点赞 回复 分享
发布于 01-20 23:24 广东
没开ll
点赞 回复 分享
发布于 02-10 21:35 河北

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务