描述
对于一个十进制数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语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:578 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:549 |
简单的a+b (C语言代码)浏览:523 |
完数 (C语言代码)浏览:685 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:372 |
幸运数 (C++代码)浏览:1258 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:512 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:553 |