我有以下问题 要解码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;
}
但不幸的是它给了我错误的答案请帮助
答案 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;
。