c++ - 双五进制编码示例

标签 c++ algorithm

我有以下问题 要解码双二进制代码,请使用数字 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;
}

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

最佳答案

我能够通过稍微简化代码来生成答案 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;
}

关于c++ - 双五进制编码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807346/

相关文章:

C++ 何时使用指向 vector 的指针?

java - 为什么我们不能改变插入排序的 while 循环中语句的顺序?

c++ - cin.get() 空行问题

c++ - 什么被认为是编译时分支?

c++ - 为什么 C++ 不支持跨作用域重载?

c++ - 我们如何有效地压缩 DNA 串

algorithm - 在没有临时存储的情况下以伪随机顺序访问网格中的每个单元格

algorithm - 如何切线连接N个相同直径的圆?

algorithm - 有断头台限制的同矩形内矩形打包算法的提示吗?

c++ - 我如何使用 MSVC++ 2010 使 dll 更小?