【问题标题】:how do I convert a very big binary number to decimal?如何将一个非常大的二进制数转换为十进制?
【发布时间】:2017-02-25 08:36:24
【问题描述】:

假设,我有一个存储在数组或字符串中的二进制数和等效的十进制数。超出了甚至 unsigned long long int 的范围。在这种情况下我该怎么办?我使用的是 C++

【问题讨论】:

  • 1.选择你的毒药(语言) 2. 告诉我你打算如何存储非常大的数字。 3. 也许想想你为什么需要这样做 - 可能有更简单的方法/设计可供使用
  • @EdHeal,你会怎么做?顺便说一句,我正在使用 C++
  • 编程语言是什么?
  • 另外你确定你需要存储大量的数字吗?
  • @EdHeal,C++ .....

标签: c++ arrays string binary decimal


【解决方案1】:

如果你使用c#,它在System.Numerics中有BigInteger

不幸的是,你应该得到有用的库(Big Integer Library), 或者像下面的代码自己实现它

class BigInt
{
public:
    enum IntType{Binary, Decimal };
    explicit BigInt(string number);
    std::string GetBinary();
    std::string GetDecimal();

private:
    std::string m_number;//you should store number as string, so you don't need care maximum number.
    IntType m_type;
};

【讨论】:

    【解决方案2】:

    正如我在 cmets 中提到的 - 使用 bitset。这是一个例子:

    #include <iostream>
    #include <bitset>
    
    using namespace std;
    
    typedef bitset<200> mybitset; // Or some other number
    
    mybitset convert(const char *s)
    {
        mybitset result;
        for (int loop = 0; s[loop]; ++loop) {
            if (s[loop] == '1') result[loop] = true;
        }
        return result;
    }
    
    int main() {
        mybitset num_1 =    convert(   "100101011101010100001");
        mybitset num_2 =    convert("110010100001001010100011");
    
        mybitset result = num_1 & num_2;
    
        cout << num_1.to_string() << endl;
        cout << num_2.to_string() << endl;
        cout << result.to_string() << endl;
    
        // your code goes here
        return 0;
    }
    

    ideone

    【讨论】:

    • 转换函数是多余的。只需使用位集构造函数,例如:mybitset num_1 ("100101011101010100001");此外,我不明白为什么这是一个答案,因为它不会转换为十进制。
    猜你喜欢
    • 2018-03-15
    • 2011-07-19
    • 2012-09-14
    • 1970-01-01
    • 2010-10-31
    • 2010-10-31
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多