杭电oj编码2031

来源:互联网 发布:华为手机网络助手在哪? 编辑:程序博客网 时间:2024/05/16 13:01

问题描述:

输入一个十进制数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<iostream>#include<stdio.h>#include<cmath>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;}


0 0