九度OJ 1208:10进制 VS 2进制 (进制转换)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2040

解决:612

题目描述:

    对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。
    例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

输入:

    一个1000位(即10^999)以内的十进制数。

输出:

    输入的十进制数的二进制逆序数。

样例输入:
173
样例输出:
181
来源:
2007年清华大学计算机研究生机试真题

思路:

进制转换思路简单,但特别容易出错, 要多练。


代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1001];
    int t[1000];
    int bin[4000];
    int lent,lenb;
    int i,j,k;
    int flag;
    int temp;
    while( ~scanf( "%s",a ) )   {
        lent = strlen(a);
        for( i = 0;i < lent;i++ )    {
            if( a[i] >= '0' && a[i] <= '9' )         
                t[i] = a[i] - '0';
            else    {
                printf( "wrong input!");
                return 1;
            }
        }
        k = 0;
        j = 0;
        while(  k < lent  || t[lent-1] != 0  )   {
            flag = 0;
            for( i = k;i < lent;i++ )    {
                temp = flag;
                flag = t[i] % 2;    // be careful don't need add flag,but not can't
                t[i] = ( t[i] + 10 * temp ) / 2;
            }
            if( t[k] == 0 )
                k++;
            if( flag )
                bin[j] = 1;
            else
                bin[j] = 0;
            j++;
        }
        for( i = 0;i < 1000;i++ )
            t[i] = 0;
        lent = 1;
        for( i = 0;i < j;i++ )   {
            flag = 0;
            for( k = 0;k < lent;k++ )    {
                temp = t[k];
                t[k] = ( t[k] * 2 + flag ) % 10;
                flag = ( temp * 2 + flag ) / 10;
            }
            if( flag ) 
                t[lent++] = 1;
            if( bin[i] )
                t[0]++;
        }
        for( i = lent - 1;i >= 0;i-- )
            printf( "%d",t[i] );
        printf( "\n" );
    }
    return 0;
}
/**************************************************************
    Problem: 1208
    User: liangrx06
    Language: C
    Result: Accepted
    Time:20 ms
    Memory:912 kb
****************************************************************/


posted on 2015-10-27 12:29  梁山伯  阅读(360)  评论(0编辑  收藏  举报

导航