问题链接HDU2031 进制转换。这是一个入门训练题,自然用C语言编写程序。

问题简述:参见上述链接。

问题分析(略)。

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

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

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


AC的C语言程序如下:

/* 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;
}