注册 登录
编程论坛 C++教室

本人小白,求教一个华为机试的题目,用C++编程。

南哥syn 发布于 2014-04-02 21:42, 612 次点击
输入一个0到255的十进制数,把它转化为8位二进制数,再将二进制数反转(最低位与最高位换、次低位与次高位换、依次类推),把反转后的二进制数再转化为十进制数并把该十进制数输出。
9 回复
#2
fl89622014-04-02 22:22
#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-2 23:06 编辑 ]
#3
fl89622014-04-02 22:22
#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 编辑 ]
#4
rjsp2014-04-03 09:37
程序代码:
#include <stdio.h>

unsigned char reverse8( unsigned char c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA ) >> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC ) >> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 ) >> 4;
    return c;
}

int main()
{
    int n;
    scanf( "%d", &n );
    printf( "%d", (int)reverse8((unsigned char)n) );

    return 0;
}
#5
jcw081201102014-04-03 11:09
回复 4楼 rjsp
现在很少见到这种古老的运算方法了,真是好看!!~
#6
南哥syn2014-04-03 15:43
回复 2楼 fl8962
我用你的程序 编译了下 有一个错误啊
#7
南哥syn2014-04-03 16:46
回复 3楼 fl8962
只有本站会员才能查看附件,请 登录
  有个错误
#8
fl89622014-04-03 23:14
回复 7楼 南哥syn
第一个,第二个有点错误。或者你看r版的更好
#9
南哥syn2014-04-05 22:41
回复 8楼 fl8962
你写的那个  哪里有问题呢
#10
fl89622014-04-08 05:10
回复 9楼 南哥syn
第一个没有任何问题, 我测试过了。
1