• 【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
    ", 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] = '';
        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
    ", i, buffer);
        }
        return 0;
    }
  • 相关阅读:
    spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable
    Linux编译安装python3
    爬取基于Flex技术的网站数据
    转:MySQL到Greenplum迁移分析
    Greenplum基本介绍
    Hive on Spark
    Flume可分布式日志收集系统
    Redis高性能内存数据库
    Kafka 分布式发布-订阅消息系统
    Spark学习之Spark Streaming
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3803463.html
Copyright © 2020-2023  润新知