首页 > 解决方案 > 输入巨大的二进制数 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 base 2 转换为 base 10)

但是,如果我想接受 10010111011100101101100011011(base 2),我的代码似乎不起作用。我还有其他方法可以做到这一点吗?

标签: c++algorithmbinaryintegerbase

解决方案


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

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


推荐阅读