输入巨大的二进制数C ++

问题描述

因此,我正在研究一个竞争性编程问题,在该问题中,您需要将两个数字以2为底,以3为底,然后对它们进行一些运算。我的代码正确实现,但是不适用于大输入。例如,当我尝试输入10010111011100101101100011011(第二个基数)和211010102022001220(三个基数)时。这是因为我将它们输入为正整数,然后将其转换为实际的以10为底的值。

这是我的转换函数(仅适用于基数2和3)

int conv(int base,ll n){
int result = 0;
if(base == 2){
    int a = 0;
    while(n > 0){
        if(n % 2 == 1){
            result += pow(2,a);
        }
        a++;
        n /= 10;
    }
    return result;
}
else if(base == 3){
    int a = 0;
    while(n > 0){
        result += (n%10)%3 * pow(3,a);
        a++;
        n /= 10;
    }
    return result;
}
return result;

当我对非常小的数字(例如conv(2,1010))运行此函数时,它将起作用;我得到10(将1010以2为基数转换为10)

但是,如果我想使用10010111011100101101100011011(基础2),我的代码似乎不起作用。我还有其他方法可以做到吗?

解决方法

根据要对base-2和base-3数字执行的特定操作,仅对字符串值进行操作可能是可行的。好处是您几乎不受限制。

以字符串形式读取输入数字。编写一个函数,以验证给定的字符串在给定的基数中是否为有效数字。然后编写这些操作以处理字符串。加法和减法很容易,但是乘法和除法还需要更多步骤。如果您需要处理三角函数和先验函数,那么这将是一个困难但可行的数学问题。基本上,您希望完全执行手动执行操作时要执行的步骤,并附带搬运和借用。

,

在cpp中处理大整数有不同的技巧。通常,您可以使用boost cpp_int。

cpp_int没有[理论]最大值。由于C ++可以直接使用指针,因此C ++中cpp_int的最大大小与指针可以寻址的最大内存范围成比例-在64位体系结构中,通常但并非总是2 ^ 64-1。换句话说,cpp_int的最大值为2 ^ 64-1,取决于它们实现符号的方式,取或取一个数量级。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...