编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回: 2550136832
方法一:
1、输入一个数,并传值给reverse_bit(unsigned int value);
2、定义一个数组,对传进来的数通过对 2 取模方式求得每一位,并存入数组;
3、通过对数组数据按照二进制存储方式处理,并求得最终结果,公式如下:
sum += (a[31-i]*pow(2,i));
4、打印结果。
方法二:
1、输入一个数,并传值给reverse_bit(unsigned int value);
2、对传进来的数通过对 2 取模方式求得每一位,这一位正好就是反转之后二进制数第一位;
3、通过对数据按照二进制存储方式处理,并求得最终结果,公式如下:
sum += (value % 2)*pow(2,31-i);
方法一:
注:
函数 pow(x , y) 返回值为:x 的 y 次幂的值;
函数头文件为:#include <math.h>;
#include <stdio.h> #include <math.h> #include <windows.h> #pragma warning(disable:4996) unsigned int reverse_bit(unsigned int value) { int a[32] = { 0 }; int i = 0; int sum = 0; for (i; i < 32; i++) { a[i] = (value % 2); value /= 2; } for (i=0; i < 32; i++) { sum += (a[31-i]*pow(2,i)); } return sum; } int main() { unsigned int value = 0; printf("Please enter a number:"); scanf("%d", &value); int result = reverse_bit(value); printf("%d\n", result); system("pause"); return 0; }方法二:
#include <stdio.h> #include <math.h> #include <windows.h> #pragma warning(disable:4996) unsigned int reverse_bit(unsigned int value) { int i = 0; int sum = 0; for (i; i < 32; i++) { sum += (value % 2)*pow(2,31-i); value /= 2; } return sum; } int main() { unsigned int value = 0; printf("Please enter a number:"); scanf("%d", &value); int result = reverse_bit(value); printf("%d\n", result); system("pause"); return 0; }很明显方法二比方法一要简洁明了,最重要的是方法二时间、空间复杂度都小于方法一。
好的程序猿写代码一定要考虑到时间、空间复杂度问题,争取用最优方案。