Почему bin_to_de c () возвращает 0? - PullRequest
0 голосов
/ 23 февраля 2020

Кто-нибудь может сказать мне, почему он возвращает 0? У меня есть Ввод:

5 2

1 0 1 1 0

И 2 запроса 1 X чтобы перевернуть X-й бит в массиве:

1 2 (результат {1 1 1 1 0})

0 LR , чтобы взять подмассив и преобразовать его в десятичное число:

0 1 4 (Здесь требуется {1,1,1,1})

В этом случае должно быть выведено 15. Но эта печать просто ноль?

Мой код:


#include <iostream>
using namespace std;


const int maxn = 1e6 +500;
char a[maxn];
//That's function which I'm stuck with
long bin_to_dec(char *s)
{
    short i;
    long res = 0;

    for (i = 0;i<sizeof(long)*8 && s[i];++i)
    {
        res<<=1;
        res |=(s[i]-'0');

    }


    return res;
}
//This function responsible for queries
//Arguments which it takes : vid - type of query,int inx - first parameter,inx1 - 2nd parameter
int zapros(int vid,int inx,int inx1 = 0)
{
    string s = "";
    if (vid == 1)
    {
        a[inx] +=1;

    }
    else
    {
        int c = 1;
        char ch[inx1+1];
        for (int k = inx;k<=inx1;k++)
        {

            ch[c] = a[k];
            c++;

        }

        cout<<bin_to_dec(ch);
        /*
        for (int k = inx;k<=inx1;k++)
        {
            s+=a[k];
        }*/

    }
}



int main()
{
    int n,q;
    int vid,inx,inx1;
    cin>>n>>q;
    for (int i =1;i<=n;i++)
    {
        cin>>a[i];
    }
    for (int j =1;j<=q;j++)
    {
        cin>>vid;
        if (vid == 1)
        {
            cin>>inx;
            zapros(vid,inx);
        }
        else
        {
            cin>>inx>>inx1;
            zapros(vid,inx,inx1);
        }
    }



    return 0;
}

Я новичок в C ++, поэтому, пожалуйста, не будьте строгими;)

1 Ответ

0 голосов
/ 23 февраля 2020

Вы сделали много ошибок ... Массивы начинаются с 0, а не с 1. Почему вы использовали массив символов? Я исправил ошибки и изменил двоичный файл на функцию int, используя стандартное преобразование (https://www.electronics-tutorials.ws/binary/bin_2.html). Когда вы создаете массив ch, вы не можете написать «char ch [expression]», это запрещено. Вы должны использовать указатели.

#include <iostream>
#include <cmath>
using namespace std;


const int maxn = 1e6 +500;
int a[maxn];
//That's function which I'm stuck with
long bin_to_dec(int s[],int n)
{
    long res = 0;
    int cont=0;
    for (int i = n-1;i>=0;i--)
    {
        res+=s[i]*pow(2,cont);
        cont++;
    }
    return res;
}
//This function responsible for queries
//Arguments which it takes : vid - type of query,int inx - first parameter,inx1 - 2nd parameter
int zapros(int vid,int inx,int inx1 = 0)
{
    string s = "";
    if (vid == 1)
    {
        if(a[inx]==1)
            a[inx]=0;
        else
            a[inx]=1;

    }
    else
    {
        int cont = 0;
        int *ch;
        ch=new int[inx1];
        for (int k = inx;k<inx+inx1;k++)
        {
            ch[cont] = a[k];
            cont++;
        }
        cout<<bin_to_dec(ch,inx1)<<endl;
        /*
        for (int k = inx;k<=inx1;k++)
        {
            s+=a[k];
        }*/
        delete[] ch;
    }
}



int main()
{
   // cout<<maxn<<endl;
    int n,q;
    int vid,inx,inx1;
    cin>>n>>q;
    for (int i =0;i<n;i++)
    {
        cin>>a[i];
    }
    for (int j =0;j<q;j++)
    {
        cin>>vid;
        if (vid == 1)
        {
            cin>>inx;
            zapros(vid,inx);
        }
        else
        {
            cin>>inx>>inx1;
            zapros(vid,inx,inx1);
        }
    }



    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...