PTA 7-250 递归函数输出一个十进制整数的十六进制形式

PTA 7-250 递归函数输出一个十进制整数的十六进制形式

分数 100
作者 于延
单位 哈尔滨师范大学

任务描述
编写函数,函数的参数是整数N,在函数中输出整数N的十六进制形式(递归方法实现)。主函数中输入整数a和b,输出从a到b的所有整数的十六进制形式。具体输出格式参考样例。

输入样例:

200 210

输出样例:

C8 C9 CA CB CC CD CE CF D0 D1 D2

输入样例:

20000 20010

输出样例:

4E20 4E21 4E22 4E23 4E24 4E25 4E26 4E27 4E28 4E29 4E2A

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

#include <stdio.h>

void hexadecimal(int inte){    //转换成十六进制输出
    if(inte == 0)    //该十进制数为0时
        return;
        
    hexadecimal(inte / 16);    //调用自身
    
    if(inte % 16 >= 10){    //余数 >= 10时对应的字母
        switch(inte % 16){
            case 10:
                printf("A");
                break;
            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;
        }
    }else{
        printf("%d", inte % 16);
    }
}

int main(){

    int m, n;
    scanf("%d %d", &m, &n);
    
    for(int i = m; i <= n; i++){    //循环范围内的十进制整数
        hexadecimal(i);    //调用函数
        if(i == n)    //不输出空格的条件
            printf("");
        else    //输出空格
            printf(" ");
    }
    
    return 0;
}

解题思路:
用短除法的思想每次除16的余数就是该十六进制数的一位,第一次除就是十六进制数的最后一位,以此类推;因为递归输出是逆序输出,所以输出后就是十六进制数。
注:十六进制数求余数(>= 10)时,用字母表示;如:10用字母’A’表示。

归属知识点:
选择结构
递归

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 递归函数输出一个十进制整数十六进制形式方法如下: 1. 将十进制整数除以16,得到商和余数。 2. 如果商为,则返回余数的十六进制形式。 3. 如果商不为,则递归调用函数,将商作为参数传入,并将余数的十六进制形式递归调用的结果拼接起来。 例如,对于十进制整数1234,按照上述方法进行转换,得到的十六进制形式为4D2。 ### 回答2: 递归函数是指在函数调用自身的函数,这种调用自身的方式使得递归函数能够解决一些复杂问题。而递归函数输出一个十进制整数十六进制形式,其实也可以通过递归函数的方式来实现。 首先,我们需要明确一个概念:十进制十六进制是两种不同的进制表示方法十进制是我们平时使用的十个数字(0、1、2、3、4、5、6、7、8、9)进行表示的,而十六进制是由0-9和A、B、C、D、E、F组成的,其A代表十进制数值10,B代表十进制数值11,以此类推。 考虑递归函数输出一个十进制整数十六进制形式的过程,我们可以将该整数不断除以16,直到商为0,然后将每一次除法的余数反转过来就是该整数十六进制形式。例如,对于一个十进制整数26,不断除以16得到的商和余数依次为:除以16的商为1,余数为10(A);再将商为1的结果除以16,得到的商为0,余数为1。这样,我们就得到了26的十六进制形式为1A。 通过以上分析可知,递归函数输出一个十进制整数十六进制形式的核心是:不断除以16并用余数表示当前位的值。 下面是一个使用Python语言实现递归函数输出一个十进制整数十六进制形式的示例代码: ```python def decimal_to_hexadecimal(decimal): if decimal == 0: return "" else: remainder = decimal % 16 decimal //= 16 if remainder < 10: return decimal_to_hexadecimal(decimal) + str(remainder) else: return decimal_to_hexadecimal(decimal) + chr(remainder - 10 + ord('A')) ``` 该递归函数的核心思想就是在函数体内不断调用自身,直到原始的十进制整数被除以16的商为0为止。每次调用函数时,先通过对该整数取余数的方式得到当前位的十六进制值,然后对商进行递归调用,最终将所有的十六进制值拼接起来就是该十进制整数十六进制形式。 通过以上示例代码,我们可以实现递归函数输出一个十进制整数十六进制形式,从而更好地了解递归函数的使用与实现。 ### 回答3: 递归函数是一种函数,在函数调用时,会将自身作为参数传递给自己,实现一个可以不断迭代地处理问题的方法递归函数输出十进制整数十六进制形式时,可以使用以下方法: 1. 确定要输出十六进制数字字符。十六进制数字字符包括0-9和A-F,可以用一个数组存储。 2. 将十进制整数不断除以16,得到商和余数。余数就是相应的十六进制数字字符。 3. 如果商不为0,继续将商除以16,并将新的余数加到字符数组,直到商等于0。 4. 递归输出函数,将字符数组的数字字符反向输出即可。 下面是一个简单的递归函数代码实现: ```python def print_hexadecimal(n): hexadecimal = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'] if n < 16: print(hexadecimal[n], end="") else: print_hexadecimal(n // 16) print(hexadecimal[n % 16], end="") ``` 这个代码,最开始定义了一个包含十六进制数字字符的列表。如果给定的十进制整数小于16,就直接输出整数所对应的十六进制数字字符。否则,将给定的整数除以16,将商作为参数递归调用函数自身,在递归回溯时,将相应的余数加到字符数组的末尾,直到最后将字符数组的数字字符反向输出

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值