Би кинарные закодированные примеры - PullRequest
1 голос
/ 27 сентября 2010

У меня возникла следующая проблема. Чтобы декодировать Биквинарный код, используйте число 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 ]

2 голосов
/ 28 сентября 2010

Я смог дать ответ 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 голос
/ 28 сентября 2010

Попробуйте изменить (b>>(1<<(n-1-i))) на (b>>(n-1-i)&1).

Редактировать: Забыл упомянуть, что данная программа также считает нулевой терминатор в строке.Вычисление n должно вычесть единицу, чтобы исправить это: int n=sizeof(a)/sizeof(char)-1;.

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