WUST Online Judge - 1158: 零起点学算法65——进制转换

1158: 零起点学算法65——进制转换

Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld
Submitted: 1652  Accepted: 933
[ Submit][ Status][ Web Board]

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

Source

零起点学算法

代码如下:

#include <stdio.h>

int main() {
    int n, r, a[100];
    while (scanf("%d%d", &n, &r) != EOF) {
        int flag = 1,i = 0;
        if(n < 0) {
            flag = 0;
            n = -n;
        } // 当n为负数时的处理方法

        do{
            a[i++] = n % r;
            n = n / r;
        }while(n); // 第一步转换:使用短除法转换十进制以下进制

        if (flag == 0) printf("-");

        while(i--) { // 第二步转换:将高于十进制的部分转化为字母形式
            if(a[i] > 9) {
                printf("%c", 'A' + a[i] - 10);
            }
            else {
                printf("%d", a[i]);
            }
        }
        printf("\n");
     }
     return 0;
 }

猜你喜欢

转载自www.cnblogs.com/mcr-tcp/p/9167910.html