gpt4 book ai didi

c++ - Base 2 到 Base 10 转换器不能处理非常大的数字?

转载 作者:行者123 更新时间:2023-11-28 07:43:39 27 4
gpt4 key购买 nike

如果用户输入一个非常大的二进制数字,输出显示 0,我将如何修改此函数以处理更大的数字?

{ 
// Binary to Decimal converter function

int bin_Dec(int myInteger)
{
int output = 0;
for(int index=0; myInteger > 0; index++ )
{
if(myInteger %10 == 1)
{
output += pow(2, index);
}
myInteger /= 10;
}
return output;
}

int _tmain(int argc, _TCHAR* argv[])
{ // start main

int myNumber;

// get number from user

cout << "Enter a binary number, Base2: "; // ask for number
cin >> myNumber;

//print conversion

cout << "Base10: " << bin_Dec(myNumber) << endl; // print conversion
system("pause");

} // end of main
}

最佳答案

停止将您的“二进制数”视为 int . int 的大小是有限的; max一般是20亿左右,也就是10位数。当您将数字滥用为位时,最多可以得到 10 个,相当于 1023。

拍一个string反而。您没有对输入做任何有用的数学运算;无论如何,您只是将它用作一串数字。

// oh, and unless you have good reason...this would be better unsigned.
// Otherwise your computer might catch fire when you specify a number larger
// than INT_MAX. With an unsigned int, it's guaranteed to just lop off the
// high bits.
// (I may be overstating the "catch fire" part. But the behavior is undefined.)
unsigned int bin_to_dec(std::string const &n) {
unsigned int result = 0;
for (auto it = n.begin(); it != n.end(); ++it) {
result <<= 1;
if (*it == '1') result |= 1;
}
return result;
}

不过,如果你有 C++11,那就是 std::stoi和系列(在 <string> 中定义),它们会在您指定基数 2 时为您执行此操作。除非您为了学习目的而重新发明轮子,否则最好使用它们。

std::cout << "Base10: " << std::stoi(myNumberString, 0, 2) << '\n';

关于c++ - Base 2 到 Base 10 转换器不能处理非常大的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313765/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com