Recursion 使用horner将二进制转换为十进制

Recursion 使用horner将二进制转换为十进制,recursion,binary,decimal,Recursion,Binary,Decimal,1x20+1x21+1x22+0x23+1x24=1+2x(1+2x(1+2x(0+2x1))) 召回b[0]=1,b[1]=1,b[2]=1,b[3]=0,b[4]=1 /* to convert a binary representation to a decimal one*/ int dec, b[5] = {1, 1, 1, 0, 1}; dec = b[4]; for (int i = 3; i >= 0; i--) { dec=2 * dec + b[i]; //

1x20+1x21+1x22+0x23+1x24=1+2x(1+2x(1+2x(0+2x1)))

召回
b[0]=1,b[1]=1,b[2]=1,b[3]=0,b[4]=1

/* to convert a binary representation to a decimal one*/

int dec, b[5] = {1, 1, 1, 0, 1};
dec = b[4];
for (int i = 3; i >= 0; i--)
{
    dec=2 * dec + b[i];  //horner's scheme
}
cout << dec << endl;
/*将二进制表示形式转换为十进制表示形式*/
int-dec,b[5]={1,1,1,0,1};
dec=b[4];
对于(int i=3;i>=0;i--)
{
dec=2*dec+b[i];//霍纳方案
}

cout这是初始化数组B的初始循环

    int B[5];
    int x,s,s1;
    for(int i=1;i<=5;i++) {
    printf("Enter %d. digit of binary number",i);
    scanf("%d",&B[i]);}
尝试将第一个循环更改为

    for(int i=0;i<5;i++) {
        printf("Enter %d. digit of binary number",i);
        scanf("%d",&B[i]);
    }
存在问题,因为您将B声明为5个整数的数组,并且由于数组具有从零开始的索引,因此索引的唯一有效值为0到4。如果要正确反转数组,请将代码替换为

    s=B[4];   /*this part for reverse the array*/
    B[4]=B[0];
    B[0]=s;

    s1=B[3];
    B[3]=B[1];
    B[1]=s1;

您不能访问B[5],因为这超出了您的阵列的边界。

不需要还原数组。

s=B[5];B[5]=B[1];B[1]=s;s1=B[4];B[4]=B[2];B[2]=s1;我想当我删除这部分的时候这里有问题,它是工作的,但工作的数字相反。当我想转换11000时,它适用于00011,因此我无法删除您的代码无法为B[0]设置值因此,除非您纠正它,否则您不能相信它是您所认为的。@allstar检查更新的答案-这应该现在就解决您的问题,但如果我想转换这11000,它的工作原理是其他方式00011@allstar请确定:您输入数字3的位的顺序是:11000还是00011?@allstar 3=1 x 2^0+1 x 2^1+0 x根据你问题的开头:3->b={1,1,0,0,0}
    for(int i=0;i<5;i++) {
        printf("Enter %d. digit of binary number",i);
        scanf("%d",&B[i]);
    }
    s=B[5];   /*this part for reverse the array*/
    B[5]=B[1];
    B[1]=s;

    s1=B[4];
    B[4]=B[2];
    B[2]=s1;
    s=B[4];   /*this part for reverse the array*/
    B[4]=B[0];
    B[0]=s;

    s1=B[3];
    B[3]=B[1];
    B[1]=s1;