本人小白,求教一个华为机试的题目,用C++编程。
输入一个0到255的十进制数,把它转化为8位二进制数,再将二进制数反转(最低位与最高位换、次低位与次高位换、依次类推),把反转后的二进制数再转化为十进制数并把该十进制数输出。
#include<iostream>
#include<string>
using namespace std;
int f(int j)
{
int i;
int sum=1;
for(i=0;i<j;++i)
sum=sum*2;
return sum;
}
int main()
{
int i,sum=0;
cin>>i;
int a[8];
for(int j=0;j<8;++j)
{
a[j]=i/f(7-j);
i=i%f(7-j);
}
for(int j=0;j!=4;j++)
{
i=a[j];
a[j]=a[7-j];
a[7-j]=i;
}
for(int j=0;j!=8;j++)
{
sum=sum+(a[j]*f(7-j));
}
cout<<sum<<endl;
return 0;
}
[ 本帖最后由 fl8962 于 2014-4-3 00:59 编辑 ]