Я делаю код, который принимает текст, который конвертируется в двоичный код, программа должна добавить каждое преобразованное число, я делаю, чтобы создать накопитель, чтобы добавить все числа к одному, есть 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;
}
Я преобразую строку в двоичную и сохранить их в массив, затем я вызываю функцию «добавить», если это первая итерация, добавить первое число с 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;
}
Здесь я делаю двоичное сложение, и результат превращается в длинный и верните его, чтобы использовать в следующей итерации
И не знаете, почему перестали работать в 18 итерациях, есть идеи о том, что происходит?