• 九度OJ 1138:进制转换 (进制转换)


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:2388

    解决:935

    题目描述:

    将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

    输入:

    多组数据,每行为一个长度不超过30位的十进制非负整数。
    (注意是10进制数字的个数可能有30个,而非30bits的整数)

    输出:

    每行输出对应的二进制数。

    样例输入:
    0
    1
    3
    8
    样例输出:
    0
    1
    11
    1000
    来源:
    2008年北京大学软件所计算机研究生机试真题

    思路:

    并不难的进制转换题,注意0的处理。


    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
     
    #define LEN 30
    #define I 9 
    #define N ( (LEN%I > 0) ? (LEN/I+1) : (LEN/I) )
    #define M (I*N)
     
    int divide2(int *a)
    {
        int i, result;
        for (i=0; i<N; i++)
        {
            //printf("=======a[%d] = %d
    ", i, a[i]);
            if (i < N-1)
                a[i+1] += (a[i] % 2) * pow(10, I);
            else
                result = a[i] % 2;
            a[i] /= 2;
            //printf("=======a[%d] = %d
    ", i, a[i]);
        }
        return result;
    }
     
    int isZero(int *a)
    {
        int i, iszero = 1;
        for (i=0; i<N; i++)
        {
            if (a[i] != 0)
            {
                iszero = 0;
                break;
            }
        }
        return iszero;
    }
     
    int main(void)
    {
        int a[N];
        char s[M+1], s2[M*4+1], tmpInt[I+1];
        int i, len;
     
        while (scanf("%s", s) != EOF)
        {
            len = strlen(s);
            for (i=len-1; i>=0; i--)
                s[M-len+i] = s[i];
            for (i=0; i<M-len; i++)
                s[i] = '0';
            s[M] = '';
            //printf("s = %s
    ", s);
     
            for (i=0; i<N; i++)
            {
                strncpy(tmpInt, s+i*I, I);
                tmpInt[I] = '';
                //printf("tmpInt = %s
    ", tmpInt);
                a[i] = atoi(tmpInt);
                //printf("a[%d] = %d
    ", i, a[i]);
            }
     
            i=0;
            do
            {
                s2[i++] = divide2(a)+'0';
                //for (int j=0; j<N; j++)
                //  printf("a[%d] = %d
    ", j, a[j]);
                //printf("iszero = %d
    ", isZero(a));
            } while (!isZero(a));
            s2[i] = '';
     
            len = strlen(s2);
            for (i=len-1; i>=0; i--)
                printf("%c", s2[i]);
            printf("
    ");
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1138
        User: liangrx06
        Language: C
        Result: Accepted
        Time:90 ms
        Memory:920 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    EncryptionAndDecryptionC# 加密 解密
    EncryptFac 加解密小工具
    Aes加密/解密示例项目
    DES加密解密工具
    DESC加密解密算法
    加解密合集
    Zabbix系列之一——zabbix3.4部署
    Linux下ntpdate时间同步
    SVN服务器搭建实录
    Failed to get D-Bus connection: Operation not permitted解决
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083893.html
Copyright © 2020-2023  润新知