7-239 进制转换

将十进制整数n(−2^31≤n≤2^31-1)转换成k(2≤k≤16)进制数。注意,10~15分别用字母A、B、C、D、E、F表示。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入两个整数n和k。

输出格式:

对于每组测试,先输出n,然后输出一个空格,最后输出对应的k进制数。

输入样例:

4
5 3
123 16
0 5
-12 2

输出样例:

5 12
123 7B
0 0
-12 -1100

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路

  1. convert函数:

该函数用于将10进制整数n转化为k进制数输出。首先,对于负数n,将其变为正数,并在输出结果前打印符号“-”。

其次,利用“除k取余”的方法,将n转化为k进制数的每一位,并将其存在digits数组中。

最后,倒序输出digits数组中存放的结果,如果该位数字大于等于10,则需要将其转化为相应的字母。

2.main函数:

首先,从标准输入读入测试数据组数T。

接下来,循环T次。每次循环从标准输入读入n和k,并调用convert函数将n转化为k进制数输出。

最后,主函数返回0。

代码

#include <stdio.h>

// 定义一个函数 convert,参数为整数n和k,返回类型为void
void convert(int n, int k) {
    // 定义一个数组 digits 用于存放转换后的数字的每个数位,数组长度为40
    // 定义一个计数器 cnt 记录当前数字的位数
    int digits[40], cnt = 0;
    
    // 判断被转换数是否为负数,如果是,将n变为正数,并输出符号“-”
    if (n < 0) {
        n = -n;
        printf("-");
    }
    
    // 使用“除k取余”的方法将数字n转换为k进制数的每个数位
    // 并将每个数位存放到数组 digits 中
    do {
        digits[cnt++] = n % k;
        n /= k;
    } while (n > 0);
    
    // 倒序输出数组 digits 中每个数位表示的数字
    // 如果该数位表示的数字大于等于10,则输出对应字母
    for (int i = cnt - 1; i >= 0; i--) {
        if (digits[i] < 10) printf("%d", digits[i]);
        else printf("%c", digits[i] - 10 + 'A');
    }
    
    // 输出换行符,表示当前数字转换完成
    printf("\n");
}

// 定义主函数
int main() {
    // 定义一个变量 T,表示需要测试的数据组数
    int T;
    // 从标准输入中读入数据组数T
    scanf("%d", &T);
    
    // 循环执行T次
    while (T--) {
        // 定义变量 n 和 k,表示需要转换的数字和目标进制
        int n, k;
        // 从标准输入中读入需要转换的数字 n 和目标进制 k
        scanf("%d%d", &n, &k);
        printf("%d ",n);
        // 调用函数 convert,将 n 转换为 k 进制数并输出
        convert(n, k);
    }
    
    // 返回值 0,程序运行正常结束
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾乃宇宙欠债王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值