使用分而治之的二进制到十进制转换
Binary to Decimal Conversion using Divide-and-conquer
我目前被困在一项作业上,几乎到处寻找我想要做什么的提示。
赋值很简单,我们要得到一个向量形式的二进制数(例如 [1,1,1,1]),我们要计算这个数字的十进制形式并放回相同的向量形式(例如 [1,5] 作为上一个例子的答案)。
虽然起初我认为这会有一个简单的解决方案,但我很快发现我们要使用这种方法来计算非常大的数字,例如二进制中的 300 个 1。
现在,在我意识到我试图直接计算它的错误之后,我很快就找到了"分而治之"的方法思想,但我没有找到一个地方给出如何在这种情况下使用它的精确例子。
由于这是一个作业,我宁愿提出一个实际解释概念并提供示例的答案,而不是直接的代码块。
提前谢谢你,
马修
编写一个以 10 为基数的数学引擎。
它应该包括另一个以 10 为基数的加法,以及乘以 int
的乘法。 (加倍就足够了)
遍历二进制数字,跟踪与该数字对应的以 10 为基数的数字。
有条件地积累。
唯一困难的部分是基础 10 数学系统,其他一切都需要 3 到 8 行代码。
可悲的是,可以更有效地做到这一点的简单方法非常有限,因为二进制数的任何数字都可以影响等效的 10 进制数的任何数字。 可能有花哨的方法,但对于 300 位数字,您不应该打扰。
以下是您问题的解决方案:
#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
using namespace std;
string Reverse(string input){
string copy(input);
reverse(copy.begin(), copy.end());
return copy;
}
string Accumulate(vector<double> vNumbers){
// Do some processign here to add these doubles
return string("");
}
string Convert(string input){
input = Reverse(input);
int power =0;
vector<double> vNumbers;
for(string::iterator it=input.begin();it!=input.end();it++){
if(*it=='1')
vNumbers.push_back(pow(2, power));
power++;
}
return Accumulate(vNumbers);
}
void main(){
string s = "0110 0010 0010 1000 0000 1011 0110 1111 0010 0000 1101 1101 0101 0010 0011 0111 0001 0001 0010 0100 1110 0110 0010 0010 1000 0000 1011 0110 1111 0010 0000 1101 1101 0101 0010 0011 0111 0001 0001";
cout << "input:" << s.c_str() << endl;
cout << "Output:" << Convert(s).c_str() << endl;
}
名称不言自明。 以下是执行的步骤:
- 将字符串作为输入
- 使用 std 库函数反转字符串,因为处理从右侧开始,即数字中的单位数字。
- 将电源和计数器初始化为 0
- 将 1110 转换为十进制的公式:(1)*2*2*2 + (1)*2*2 + (1)*2 + (0)*1 = 14
- 逐个迭代字符串的字符;如果字符为 1,则计算 2^power 并添加到计数器。 如果为 0,则忽略
- 将功率增加 1
- 将计数器(即答案)转换为字符串
- 自己编写 Accumulate()。
相关文章:
- C++:二进制到十进制w/转换过程的外观
- 十六进制到十进制转换的未清理答案
- 如何在C++中将二进制编码十进制转换为 int
- 以正确的顺序从十进制转换为二进制
- Arduino 十六进制到十进制转换
- 使用指数将十进制转换为二进制
- 从十进制转换为 BCD
- 使用堆栈将字符串格式的十进制转换为双精度
- 混乱将十进制转换为C 中的十六进制
- 使用位操作员将十进制转换为八十位
- 将长 64 位十进制转换为二进制
- 将十进制转换为十六进制,找不到我的逻辑错误
- 试图制作一个将十进制转换为二进制和ASCII C++的表
- 将字符串中的十进制转换为二进制时出错
- 用正确的位大小在c++中将十进制转换为二进制
- 在编译时将十进制转换为十六进制
- 为什么将十进制转换为二进制的递归方法比迭代、使用和返回字符串更快
- 将十进制转换为 32 位二进制
- 以最佳方式将十进制转换为二进制
- 使用分而治之的二进制到十进制转换