C++ 如何将非常大的二进制数转换为十进制数?

C++ 如何将非常大的二进制数转换为十进制数?,c++,arrays,string,binary,decimal,C++,Arrays,String,Binary,Decimal,假设我在数组或字符串中存储了一个二进制数,而等效的十进制数超出了偶数无符号长整型的范围。在这种情况下我该怎么办?我使用的是C++如果使用C#,它在系统中有biginger 不幸的是,您应该得到有用的library(), 或者按照下面的代码自己实现它 class BigInt { public: enum IntType{Binary, Decimal }; explicit BigInt(string number); std::string GetBinary();

假设我在数组或字符串中存储了一个二进制数,而等效的十进制数超出了偶数无符号长整型的范围。在这种情况下我该怎么办?我使用的是C++

如果使用C#,它在
系统中有
biginger

不幸的是,您应该得到有用的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;
};
如果使用c#,则在
System.Numerics
中有
biginger

不幸的是,您应该得到有用的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;
};

正如我在评论中提到的,使用比特集。以下是一个例子:

#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;
}
#包括
#包括
使用名称空间std;
typedef位集mybitset;//或者其他号码
mybitset转换(常量字符*s)
{
mybitset结果;
for(int-loop=0;s[loop];++loop){
如果(s[loop]=“1”)结果[loop]=真;
}
返回结果;
}
int main(){
mybitset num_1=转换(“1001010111010100001”);
mybitset num_2=转换(“11001010000100100011”);
mybitset结果=num_1和num_2;

cout正如我在评论中提到的-使用位集。以下是一个示例:

#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;
}
#包括
#包括
使用名称空间std;
typedef bitset mybitset;//或其他数字
mybitset转换(常量字符*s)
{
mybitset结果;
for(int-loop=0;s[loop];++loop){
如果(s[loop]=“1”)结果[loop]=真;
}
返回结果;
}
int main(){
mybitset num_1=转换(“1001010111010100001”);
mybitset num_2=转换(“11001010000100100011”);
mybitset结果=num_1和num_2;

选择你的毒药(语言)2.告诉我你打算如何存储非常大的数字。3.也许想一想你为什么需要这样做-可能一个更简单的方法/设计是availlable@EdHeal顺便问一下,Iam用C++编程语言是什么?你确定你需要大量存储吗?@ EdHeal,C++…1。选择毒药(语言)2.告诉我你打算如何存储非常大的数字。3.也许想一想你为什么需要这样做-可能一个更简单的方法/设计是availlable@EdHeal顺便问一下,Iam用C++编程语言是什么?你也肯定需要极大地存储大量的数字吗?@ EdHeal,C++……转换函数是多余的。请尽量使用位集构造函数,例如:mybitset num_1(“1001010111010100001”);此外,我不明白为什么这是一个答案,因为它不会转换为十进制。转换函数是冗余的。只需使用位集构造函数,例如:mybitset num_1(“1001010110100001”);此外,我不明白为什么这是一个答案,因为它没有转换成十进制。