Добавление двоичных чисел с помощью накопителя - PullRequest
0 голосов
/ 03 мая 2020

Я делаю код, который принимает текст, который конвертируется в двоичный код, программа должна добавить каждое преобразованное число, я делаю, чтобы создать накопитель, чтобы добавить все числа к одному, есть 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 итерациях, есть идеи о том, что происходит?

...