描述
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入
一个1000位(即10^999)以内的十进制数。
输出
输入的十进制数的二进制逆序数。
样例输入1
985
样例输出1
623
#include <stdio.h> #include <stdlib.h> #include <string.h> void swap(int *p,int *q) { int temp; temp =*p; *p =*q; *q =temp; } void reverse(int arr[],int left,int right) { int i; for(i=left;i<=(left+right)/2;i++) swap(arr+i,arr+left+right-i); } void m_to_n(int arr_m[],int arr_n[],int m,int n,int m_len,int *pn) { int i,j; *pn=0; for(i=0;i<m_len;) { int r=0; for(j=i;j<m_len;j++) { int temp=arr_m[j]+m*r; r=temp%n; arr_m[j]=temp/n; } arr_n[(*pn)++]=r; while(arr_m[i]==0) i++; } reverse(arr_n,0,*pn-1); } int main() { char s[1010]; int dec[1010]={0}; int bin[4000]={0}; while(gets(s)) { int dec_len=strlen(s); int bin_len=0; int *pd=&dec_len; int *pb=&bin_len; int i; for(i=0;i<dec_len;i++) dec[i] = s[i]-'0'; m_to_n(dec,bin,10,2,dec_len,pb); reverse(bin,0,bin_len-1); m_to_n(bin,dec,2,10,bin_len,pd); for(i = 0;i<dec_len;i++) printf("%d",dec[i]); printf("\n"); } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复