Newguy


私信TA

用户名:772007765

访问量:82169

签 名:

已秃人士

等  级
排  名 28
经  验 14606
参赛次数 3
文章发表 92
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

描述

对于一个十进制数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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区