杭电oj编码2031

问题描述:

输入一个十进制数N,将它转换成R进制数输出。


输入:

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。


输出:

为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。


样例输入:

7 2

23 12

-4 3


样例输出:

111

1B

-11


分析:

这道题需要用到从10进制转换成其他进制的方法。

1、使用整型数组存储,包括(10,11,12,13,114,15)

2、将负数转化为正数做处理。

3、倒序输出


代码:

#include
#include
#include
int main()
{
    int N, R;
    while (~scanf("%d %d", &N, &R))
    {
        int num, i = 0, c[100000];
        for (int num = abs(N); num != 0; ++i)//使用abs函数,用于取得数的绝对值
        {            
            c[i] = num % R;//将余数保存在整形数组中
            num /= R;//将上次循环中的数据取整,并保留,用做下次循环时使用
        }
        if (N < 0)//当输入的数是负数时,需要输出负号
            printf("-");
        for (int j = i - 1; j >= 0; --j)//因为整型数组中存储的余数中可能会有‘10’,‘11’,‘12’,‘13’,‘14’,‘15’,将其转换成对应的字符。
        {
            if (c[j] == 10)
                printf("A");
            else if (c[j] == 11)
                printf("B");
            else if (c[j] == 12)
                printf("C");
            else if (c[j] == 13)
                printf("D");
            else if (c[j] == 14)
                printf("E");
            else if (c[j] == 15)
                printf("F");
            else 
                printf("%d", c[j]);
        }
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(HDU水题)