c++ - 用累加器添加二进制数
问题描述
我正在做一个将文本转换为二进制的代码,程序需要添加每个转换的数字,我正在做的是创建一个累加器来将所有数字加到一个数字中,有 200 个二进制数字,程序运行良好,直到第 18 次迭代
图书馆:
#include <iostream>
#include <math.h>
#define MAX 200
#include <bitset>
#include <stdlib.h>
#include <sstream>
这是主要的:
int main()
{
bitset<8>text[MAX];
string myString = "2074656d7075732e20446f6e65632076697461652073617069656e207574206c696265726f2076656e656e617469732066617563696275732e204e756c6c616d207175697320616e74652e20457469616d2073697420616d6574206f7263692065676574";
for (std::size_t i = 0; i < myString.size(); ++i){
text[i]=bitset<8>(myString.c_str()[i]);
}
int array[20];
int i=0;
long acumulator=0;
bool f=0;
for(int j=0;j<18;j++){
if(f==0){
string b = text[j].to_string();
long bn1 = atoi(b.c_str());
acumulator = add(bn1,0);
f=1;
}else{
string b = text[j].to_string();
long bn1 = atoi(b.c_str());
acumulator = add(bn1,acumulator);
}
}
cout<<acumulator;
return 0;
}
我将字符串转换为二进制并将它们保存到一个数组中,然后我调用“add”函数,如果它是第一次迭代,将第一个数字与 0 相加并将结果保存在一个名为“acumulator”的变量中,然后继续调用具有下一个数字和累加器的函数,所有工作直到第 18 次迭代,开始添加奇怪的数字
添加功能:
long add(long bn1,long bn2){
int r=0, i=0;
int sum[100];
stringstream ss;
while (bn1 != 0 || bn2 != 0) {
sum[i++] = (int)((bn1 % 10 + bn2 % 10 + r) % 2);
r = (int)((bn1 % 10 + bn2 % 10 + r) / 2);
bn1 = bn1 / 10;
bn2 = bn2 / 10;
}
if (r != 0){
sum[i++] = r;
}
for (int j = i-1; j >=0; j--){
ss << sum [j];
}
long result;
ss >> result;
return result;
}
这里我做了二进制加法,结果被转换成一个long,并返回它以在下一次迭代中使用它
而且不知道为什么在第 18 次迭代中停止工作,知道发生了什么吗?
解决方案
推荐阅读
- r - 从分析中省略某些列
- php - SQL: select * from users: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (使用密码: YES)
- angularjs - 如何使后退按钮在角度状态下工作
- twitter-bootstrap-3 - 透明模态标题引导程序 3
- sql - PostgreSQL 使用来自 2 个表的数据,没有一个共同的值,而是一个布尔值
- discord.js - 分配或删除角色时如何在 Discord 上编辑嵌入消息
- python - 为什么代码无法用下划线替换空格
- node.js - 为什么对象没有在 express.Router() 的路由处理程序的回调中传递,从不同的模块导出?
- laravel - 使用 Laravel 对 JSON api 进行模型绑定
- mysql - mysql regexp 其中一些字符 + 1 个未知字符