HDU2031 进制转换

问题链接:HDU2031 进制转换。

这是一个入门训练题,自然用C语言编写程序。

需要注意的一点是,将一个10进制数转换为2进制的话,字符串可能很长,字符数组需要大一点的空间,80=20*4字符是够的,因为整数最长只有10进制19位。

人们常用的是10进制,有关10进制转换,可以参见:I00028 整数逆序

本题还需要注意负数的处理!

AC程序如下:

/* HDU2031 进制转换 */

#include <stdio.h>
#include <string.h>

void reverse(char s[])
{
    int i,j;
    int c;

    for(i=(s[0]=='-'?1:0),j=strlen(s)-1; i<j;i++,j--)
    {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

void convert(int n, int r, char *s)
{
    char *t;

    t = s;

    // 处理负数
    if(n<0) {
        *t++ = '-';
        n = -n;
    }

    while(n) {
        *t = n % r;
        if(*t >= 10)
            *t = *t - 10 + 'A';
        else
            *t = *t + '0';
        n /= r;
        t++;
    }
    *t = '\0';

    reverse(s);
}

int main(void)
{
    int n, r;
    char t[80];

    while(scanf("%d%d", &n, &r) != EOF) {
        convert(n, r, t);
        printf("%s\n", t);
    }

    return 0;
}

 

你可能感兴趣的:(进制转换,进制,hdu2031)