sdut_1252_进制转换

Problem Description

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

Input

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

Output

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

Sample Input

7 2
23 12
-4 3

Sample Output

111
1B
-11

Hint

Source

HDOJ

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

struct queue
{
    int data[10010];
    int top;
};

int main()
{
    int n, m;
    struct queue q;
    while(~scanf("%d%d", &n, &m))
    {
        if(n == 0)
            printf("0\n");
        else
        {
            int flag = 0;
            q.top = 0;
            if(n < 0)
            {
                n = - n;
                flag = 1;
            }
            while(n > 0)
            {
                q.data[++q.top] = n % m;
                n = n / m;
            }
            if(flag)
                printf("-");
            while(q.top > 0)
            {
                if(q.data[q.top] < 10)
                    printf("%d", q.data[q.top]);
                else             //大于10的类型
                {
                    switch(q.data[q.top])
                    {
                    case 11:
                        printf("B");
                        break;
                    case 12:
                        printf("C");
                        break;
                    case 13:
                        printf("D");
                        break;
                    case 14:
                        printf("E");
                        break;
                    case 15:
                        printf("F");
                        break;
                    case 16:
                        printf("G");
                        break;
                    case 10:
                        printf("A");
                    }
                }
                q.top--;
            }
            printf("\n");
        }
        
    }
    return 0;
}
 

猜你喜欢

转载自blog.csdn.net/strongerXiao/article/details/81351710