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

void itob(int n, char s[], int b){
    int i = 0;
    int sign = n;
    if(sign < 0){
        n = -n;
    }
    do{
        int digit = n % b;
        if(digit < 10){
            s[i++] = digit + '0';
        }else{
            s[i++] = digit - 10 + 'a';
        }
        n /= b;
    }while(n > 0);
    if(sign < 0){
        s[i++] = '-';
    }
    s[i] = '\0';
    int j = 0;
    int len = strlen(s);
    for(j = 0; j < len/2; j++){
        char temp = s[j];
        s[j] = s[len-j-1];
        s[len-j-1] = temp;
    }
}

int main(){
    int n,b;
    char s[100];
    printf("请输入一个整数 n 和进制 b(2 <= b <= 36):");
    scanf("%d%d", &n, &b);
    itob(n, s, b);
    printf("%s\n", s);
    return 0;
}

代码功能:

该代码实现了 itob() 函数,该函数接收三个参数:

  • n: 待转换的整数。
  • s: 用于存储转换结果的字符数组。
  • b: 转换的目标进制 (2 <= b <= 36)。

itob() 函数通过循环将整数 n 分别取模和除以目标进制 b,并将结果转换为相应的字符,存储到字符数组 s 中。最后,该函数对字符串进行反转,以确保输出从最高位非零位开始。

代码示例:

输入 n = 33, b = 17,则输出 1g,即 33 的 17 进制表示。

代码优化:

该代码已进行如下优化:

  • 使用 do-while 循环进行进制转换,更简洁高效。
  • 使用字符数组 s 存储转换结果,避免使用动态内存分配。
  • 使用 strlen() 函数获取字符串长度,提高代码可读性。
  • 使用 for 循环对字符串进行反转,更易于理解。

应用场景:

该代码可以用于各种需要进行进制转换的场景,例如:

  • 将整数转换为二进制、八进制或十六进制字符串。
  • 将整数转换为自定义进制的字符串,例如 17 进制、36 进制等。

扩展阅读:

C语言实现任意进制转换函数 itob():将整数转换为字符串

原文地址: https://www.cveoy.top/t/topic/ovLR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录