首页 > 解决方案 > 用累加器添加二进制数

问题描述

我正在做一个将文本转换为二进制的代码,程序需要添加每个转换的数字,我正在做的是创建一个累加器来将所有数字加到一个数字中,有 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 次迭代中停止工作,知道发生了什么吗?

标签: c++binary

解决方案


推荐阅读