#学编程的小白# 2023-09-12 15:31 采纳率: 100%
浏览 8
已结题

c语言进制转换相关问题

我在做学校的新生练习题时,对一道题目有疑问,我开始是直接写了一道判断的,但没有通过,后来用了个递归才过了,但不知道一开始那一段代码的错误出现在哪里。
下面是题目:

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

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

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

样例输入
7 2
23 12
-4 3
样例输出
111
1B
-11

这段是我无法通过的代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    int n, r; char  arr[100] = { 0 };
    while (~scanf("%d%d", &n, &r) && r >= 2 && r <= 16) {
        if (n < 0) {
            printf("-");
            n = -n;
        }
        int i = 0; int len = 0;
        int u = n % r;
        while (n > 0) {
            arr[i] = n % r;
            n = n / r;
            i++;
            len++;
        }
        for (int i = len - 1; i > 0; i--) {
            printf("%d", arr[i]);
        }
        if (r >= 10 && r <= 16) {
            printf("%c", u + 55);
        }
        else {
            printf("%d", arr[len - 1]);
        }
        printf("\n");
    }return 0;
}

以下这段是我通过的递归代码:

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

void convert(int n, int r) {
    static char digits[] = "0123456789ABCDEF";

    if (n >= r) {
        convert(n / r, r);
    }
    putchar(digits[n % r]);
}

int main() {
    int n, r;

    while (scanf("%d%d", &n, &r) == 2 && r >= 2 && r <= 16) {
        if (n < 0) {
            putchar('-');
            n = -n;
        }
        convert(n, r);
        putchar('\n');
    }

    return 0;
}

非常感谢

  • 写回答

2条回答 默认 最新

  • 浪客 2023-09-12 15:44
    关注
    
    int main()
    {
        int n, r;
        char arr[100] = {0};
        while (~scanf("%d%d", &n, &r) && r >= 2 && r <= 16)
        {
            if (n < 0)
            {
                printf("-");
                n = -n;
            }
            int i = 0;
            int len = 0;
            // int u = n % r;
            while (n > 0)
            {
                arr[i] = n % r;
                n = n / r;
                i++;
                len++;
            }
            // for (int i = len - 1; i > 0; i--) {
            for (int i = len - 1; i >= 0; i--)
            {
                // printf("%d", arr[i]);
                // }
                //  if (r >= 10 && r <= 16)
                if (arr[i] >= 10)
                {
                    // printf("%c", u + 55);
                    printf("%c", arr[i] - 10 + 'A');
                }
                else
                {
                    // printf("%d", arr[len - 1]);
                    printf("%d", arr[i]);
                }
            } //
            printf("\n");
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月12日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集