【C语言】练习3-5

  •  题目来源:《The C programming language》中的习题P51
  •  练习2-1:  编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成16进制整数保存在s中。

  解题思路:这题本身并不难,由于习惯性思维,我们可能会忽略一些关键性的东西。比如,对于题目中的进制数,我们一般只会考虑到有2进制、8进制和16进制,其实 还有3进制,4进制...,总的来说进制数的范围为[2,36]。还有一点,对于整数,我们可能常常考虑的是正整数。下面我们看一下具体的代码实现。

  代码实现

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* 字符串逆转 */
void reverse_itob(char s[]) {
    int c, i, j;
    for ( i = 0, j = strlen(s)-1; i < j; i++, j--) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

void itob(int n, char s[], int b) {
    static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int i, sign;
    // 判断是否位于进制数的范围
    if ( b < 2 || b > 36 ) {
        fprintf(stderr, "EX3_5: 不持支持进制数 %d\n", b);
        exit(EXIT_FAILURE);
    }
    // 判断是否为负数
    if ((sign = n) < 0){
        n = -n;
    }
    i = 0;
    do {
        s[i++] = digits[n % b];
    } while ((n /= b) > 0);
    if (sign < 0){
        s[i++] = '-';
    }
    s[i] = '\0';
    reverse_itob(s);
}

int main(void) {
    char buffer[10];
    int i;
    
    for ( i = 2; i <= 37; ++i ) {
        itob(255, buffer, i);
        printf("255 转化为%-2d 进制的结果为 : %s\n", i, buffer);
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值