C或C ++中的Stdin:Spotify:反向二进制拼图

时间:2013-03-14 23:51:49

标签: c++ c stdin

这是我关于堆栈溢出的第一篇文章,所以如果我错过了规则,我会提前道歉。 我试着搜索一些帖子,但无法找到我要找的东西。

我正在尝试在Spotify上提交Reversed Binary problem但是它正在回复"错误答案"。我用C和C ++编写了这个问题,我能够验证很多输入的答案。似乎问题不在于程序的逻辑。该谜题指出"输入是从标准输入读取的。

我试过用:

  1. C:printf,scanf functions
  2. C ++:cout和cin函数(以及#34;使用命名空间std"在顶部)
  3. C ++:直接使用std :: cout和std :: cin函数。
  4. 然而,似乎都没有效果。

    int stack[32];
    top=-1
    long inputNum,outputNum=0;
    cout<<"Enter a Number\n";
    cin>>inputNum;
    while(inputNum>1) {
        if(inputNum%2 == 0) {
            push(0);
            inputNum=inputNum/2;
        } else if(inputNum%2 == 1) {
            push(1);
            inputNum=inputNum/2;
        }
    }
    push(1);
    int i=0,x=0;
    while(top>-1) {
        x=pop();
        if(x==0) {
            i++;
            continue;
        } else if(x==1) {
            outputNum=outputNum+powl(2,i);
            i++;
        }
    }
    cout<<outputNum;
    

3 个答案:

答案 0 :(得分:2)

确定。你必须意识到,spotify似乎是一个自动机器人,它编译并运行你提交的代码。

首先,您通过提供“输入号码”提示来污染答案。机器人不会将其与真实答案分开。

其次,我看不出它是如何编译的。什么是推送() pop()顶部堆栈代码?你想尝试使用std :: stack类吗?如果是这样,请检查您的使用方式。

另一方面,如果你没有使用std :: stack,而是使用你自己的一些自定义宏(未显示),那么我的赌注就是检查那些。

答案 1 :(得分:0)

从c ++读取stdin,并写入stdout:

#include <iostream>

int main() {
    unsigned int value;
    std::cin >> value;
    std::cout << reverse_binary(value);
}

您只需要实施reverse_binary(c:

您可以将其提取到适用于任何流的函数:

void main_io(std::istream& input, std::ostream& ouput) {
    unsigned int value;
    input >> value;
    output << reverse_binary(value);
}

并使用cincout

进行调用
int main() {
    main_io(std::cin, std::cout);
}

或者您可以使用stringstream s:

进行测试
#include <sstream>
#include <cassert>

int main() {
    std::istringstream input("13");
    std::ostringstream output;

    main_io(input, output);

    assert(output.str() == "11");
}

答案 2 :(得分:0)

你的流媒体(虽然越野车)工作正常 我用你的代码运行了代码,

int reverse_binary(int value)
{
  if (value == 13) return 11;
  return 1;
}

它必须在您自己的reverse_binary函数中。 你的实际问题是什么?