首页 > 解决方案 > 为什么 bin_to_dec() 返回 0?

问题描述

谁能告诉我为什么它返回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++ 的初学者,所以请不要严格;)

标签: c++function

解决方案


你犯了很多错误......数组从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;
}

推荐阅读