【问题标题】:from hex to decimal , binary to decimal and oct to decimal program c++从十六进制到十进制,二进制到十进制和八进制到十进制程序c ++
【发布时间】:2016-10-31 10:26:14
【问题描述】:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

void main() {
    int a, b;
    while (cin >> a) {
        switch (a) {
        case 2: {
            cin >> b;
            std::string s = std::to_string(b);
            int dec = std::stoi(s, nullptr, 2);
            cout << dec << endl;break;
        }
        case 8:
            cin >> b;
            cout << oct <<b<< endl; break;
        case 16:
            std::cin >> std::hex >> b;
            std::cout << b << std::endl;

        }
    }
}

那是我的代码。它们每个都可以工作,但十六进制的。当我使用它一次时,它就不起作用了。

For example if i have an input: 
2 1111
16  F
8 1
it should have an output:
15
15
1

第一个数字是 hex/bin/oct,第二个是你给的数字。

关于while(cin>>a),是这样的,因为它应该是一个无限循环,会有很多输入,是的。我猜因为那个语句它不起作用,但我不知道不知道怎么解决。

【问题讨论】:

    标签: c++ hex


    【解决方案1】:

    您的代码工作正常:http://ideone.com/tBkJ2x 如果您遇到错误,则它是在您的示例输入之外的值上。如果您提供的值会给您带来问题,我很乐意与您一起研究。

    顺便说一句,为什么不直接使用stoi 呢?例如:

    string s;
    
    while(cin >> a) {
        cin >> s;
        cout << stoi(s, nullptr, a) << endl;
    }
    

    Live Example

    编辑:

    hexoct 有粘性:https://*.com/a/1533222/2642059

    因此,如果你设置了这个,你也必须取消设置它。

    您需要更改:cout &lt;&lt; oct &lt;&lt;b&lt;&lt; endlcout &lt;&lt; oct &lt;&lt; b &lt;&lt; dec &lt;&lt; endlcin &gt;&gt; hex &gt;&gt; bcin &gt;&gt; hex &gt;&gt; b &gt;&gt; dec 才能使您的代码正常工作。 (或者最好切换到我上面的代码。)

    当您在读取十六进制数后输入a 时,16 被翻译为十六进制数,因此它被解释为:22(十进制)。

    【讨论】:

    • @Pafo 我已经编辑来解释这个问题。直到您输入该评论,我才看到它。既然它对我有帮助,它也可能对其他人有帮助,将它纳入您的问题可能会成为一个更好的问题。
    • 嘿伙计,谢谢。我在这段代码上添加了 dec -> std::cin >> std::hex >> b>>dec;它现在可以工作了。dec究竟是如何修复程序的?编辑:实际上,当我输入很多东西时,它就无法正常工作。编辑 2:我添加了 cout
    • @Pafo 你需要给我看一个具体的例子,输入很多东西会破坏功能。 (我再次强烈建议使用我的代码而不是 switch 语句。)
    • 现在它工作得很好,但我不知道如何用你的代码做到这一点?
    • @Pafo 点击“Live Example”按钮,它链接了我的代码。另外,如果这解决了您的问题,请不要忘记接受。