c++ - 输入巨大的二进制数 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),我的代码似乎不起作用。我还有其他方法可以做到这一点吗?
解决方案
根据您要对 base-2 和 base-3 数字执行的特定操作,仅对字符串值进行操作可能是可行的。好处是你几乎是无界的。
将您的输入数字读取为字符串。编写一个函数来验证给定字符串是否是给定基数中的有效数字。然后编写这些操作来处理字符串。加法和减法很容易,但乘法和除法需要更多的步骤。如果您需要处理三角函数和超越函数,那么这将是一个困难但可行的数学问题。基本上,当您手动执行操作时,您希望完全执行您所经历的步骤,完成携带和借用。
推荐阅读
- c# - 是否存在没有默认值的可选参数,除非通过/指定/使用,否则“不存在”?
- c# - 如何从类中获取特定类型的所有可枚举属性
- javascript - 添加非额外 Reducer 时 Redux Toolkit Slice Reducer 不工作
- mysql - 我在向 Datagridview 显示 mysql 行时遇到问题
- html - Tweeter 与自动化代码不同的 Twitter 组件中的 data-testid 是什么?
- r - 将 R 中的大型数据集与不同的列合并
- python - 0 轴是使用 pcolormesh 和 matplotlib.pyplot.subplots 生成的
- casting - 使用 rdrand 指令生成给定范围的随机数
- graphql - Graphql Apollo Federation - 基于实现服务解析计算域
- javascript - p5.play 不会在 repl.it 上运行