码迷,mamicode.com
首页 > 其他好文 > 详细

HDU2031 进制转换

时间:2016-06-23 10:01:52      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

问题链接: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 进制转换

标签:

原文地址:http://blog.csdn.net/tigerisland45/article/details/51740546

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!