2013-03-14 28 views
0

这是我的第一篇关于堆栈溢出的文章,所以如果我错过了一条规则,我会提前道歉。 我试图搜索一些帖子,但无法找到我正在寻找的东西。Stdin在C或C++:Spotify:反向二进制拼图

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

我曾尝试使用:

  1. C:具有printf,scanf功能
  2. C++:cout和CIN函数(和写作 “使用命名空间std” 在顶部)
  3. C++:直接使用std :: cout和std :: cin函数。

但似乎没有工作。

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; 
+1

欢迎!请花几分钟时间阅读[faq]。 – 2013-03-14 23:53:07

+2

如果你阅读整个常见问题,你会得到一个徽章(c: – 2013-03-14 23:56:30

+3

)发布最短的非工作例子,也许20行代码,解释你期望发生什么以及发生了什么。 – 2013-03-14 23:59:00

回答

0

要在C++标准输入读取和写入到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); 
} 

并使用cin和它调用它和cout

int main() { 
    main_io(std::cin, std::cout); 
} 

,也可以使用stringstream氏试验是:

#include <sstream> 
#include <cassert> 

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

    main_io(input, output); 

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

您的流媒体(虽然越野车)正常工作。
我跑你的代码,

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

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

+0

问题是,当我发送这个解决方案(这对我的IDE Xcode的任何数字1 <= n <= 1000000000)完美到Spotify邮件组“[email protected]”,我收到此响应:
您好Shishir Mahajan, 感谢您提交解决方案,解决我们的问题“reversebinary”! 我们已经测试过您的解决方案,而我们不幸的是 发现了以下错误: 错误的答案但不要让这个阻止你,随时修复你的程序和 再试一次!你真的,Spotify – user2171983 2013-03-15 07:17:29

+0

我无法弄清楚,什么纠正,因为我没有看到解决方案中的问题。 – user2171983 2013-03-15 07:19:30

2

好的。你必须认识到,Spotify的东西似乎是一个自动化的机器人编译和运行你提交的代码。

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

其次,我看不出它是如何编译的。这是什么push(),pop(),top and stack code?你想使用std :: stack类吗?如果是这样,请检查您的使用方式。另一方面,如果你不使用std :: stack,而是你自己的一些自定义宏(未显示),那么我的赌注是检查这些宏。

+0

是的,我意识到它的自动化不是。让我删除cout语句,并在最后打印(cout)最终答案,然后重试。由于缺乏空间,我没有复制整个代码。我实现了stack push()和pop()函数,它们的定义在我的main()下面。 Top是一个变量,用于保存从-1开始的堆栈当前位置的跟踪,第一次将在堆栈[++]的堆栈[0]处进行。 Stack [32]是一个由32个元素组成的整数堆栈,因为我需要的最大数量是10亿,它可以被32位长的任何数据类型(Log 2 1000000000)= 32位所包含。 – user2171983 2013-03-15 18:19:42

+1

好吧......我认为第一个COUT声明是问题,我删除了“cout <<”输入一个数字\ n“”,现在它接受我的解决方案。感谢你们 ! – user2171983 2013-03-15 18:30:11

+0

这就是我试图在我的答案中突出显示的内容,您需要测试并检查输出是否如预期。 – 2013-03-15 22:15:00