zoukankan      html  css  js  c++  java
  • 九度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( "
    " );
        }
        return 0;
    }
    /**************************************************************
        Problem: 1208
        User: liangrx06
        Language: C
        Result: Accepted
        Time:20 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    spring boot整合使用mybatis
    spring boot整合使用jdbcTemplate
    spring boot全局捕获异常
    springboot 静态资源访问
    spring boot项目的启动方式
    第一个spring boot项目 springboot-helloworld
    ASP.Net MVC 登录授权验证
    C# mysql 事务处理
    无法删除数据库,因为该数据库当前正在使用"问题解决
    mysql 按照小时去除一段时间内的不同状态数据统计
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083819.html
Copyright © 2011-2022 走看看