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

来源:互联网 发布:nodejs python 前景 编辑:程序博客网 时间:2024/06/05 20:18

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2388

解决:935

题目描述:

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

输入:

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

输出:

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

样例输入:
0138
样例输出:
01111000
来源:
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\n", 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\n", 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] = '\0';        //printf("s = %s\n", s);         for (i=0; i<N; i++)        {            strncpy(tmpInt, s+i*I, I);            tmpInt[I] = '\0';            //printf("tmpInt = %s\n", tmpInt);            a[i] = atoi(tmpInt);            //printf("a[%d] = %d\n", i, a[i]);        }         i=0;        do        {            s2[i++] = divide2(a)+'0';            //for (int j=0; j<N; j++)            //  printf("a[%d] = %d\n", j, a[j]);            //printf("iszero = %d\n", isZero(a));        } while (!isZero(a));        s2[i] = '\0';         len = strlen(s2);        for (i=len-1; i>=0; i--)            printf("%c", s2[i]);        printf("\n");    }     return 0;}/**************************************************************    Problem: 1138    User: liangrx06    Language: C    Result: Accepted    Time:90 ms    Memory:920 kb****************************************************************/


0 0