描述
对于一个十进制数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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复