为什么bin_to_dec()返回0?

问题描述 投票:0回答:1

有人可以告诉我为什么它返回0吗?我有输入:

5 2

1 0 1 1 0

和2个查询1 X翻转数组中的第X位:

1 2(结果{1 1 1 1 0})

0 L R接受一个子数组并将其转换为Decimal:

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 ++的初学者,所以请不要太严格;)

c++ function
1个回答
0
投票

您犯了很多错误...数组从0开始,而不是从1开始。为什么使用char数组?我已更正错误,并使用标准转换(https://www.electronics-tutorials.ws/binary/bin_2.html)将二进制更改为int函数。创建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;
}
© www.soinside.com 2019 - 2024. All rights reserved.