双序编码实例

时间:2010-09-27 19:59:08

标签: c++ algorithm

我有以下问题 要解码Biquinary代码,请使用数字5043210。 在每个数字处将二进制数乘以数字5043210.这将给出一个十进制数字。 例如,取数字0110000.要将其更改为十进制: (5×0)+(0×1)+(4×1)+(3×0)+(2×0)+(1×0)+(0×0)= 4 我试过这个

#include <iostream>
using namespace std;
int main(){

    char a[]="5043210";
    int sum=0;
    int b=48;
    int n=sizeof(a)/sizeof(char);
     for (int i=0;i<n;i++){

         sum+=(a[i]-'0')*(b>>(1<<(n-1-i)));

     }

     cout<<sum<<endl;


     return 0;
}

但不幸的是它给了我错误的答案请帮助

2 个答案:

答案 0 :(得分:2)

我能够通过简化代码来产生答案4。我颠倒了a[]的顺序并使用了std::bitset来使代码更容易和更清晰。

#include <bitset>
#include <iostream>

int main()
{
    char a[] = "0123405";
    std::bitset<7> bits(48);
    int sum = 0;
    for (int i = 0; i < 7; ++i)
        sum += (a[i]-'0')*bits[i];

    std::cout << sum << std::endl;
    return 0;
}

答案 1 :(得分:1)

尝试将(b>>(1<<(n-1-i)))更改为(b>>(n-1-i)&1)

编辑:忘记提及给定程序还计算字符串上的空终止符。 n的计算应减去一个来纠正它:int n=sizeof(a)/sizeof(char)-1;