• [笔记]一道C语言面试题:得到整数的M进制表示字符串


    题目:输入整数n和M,输出n在M进制下的表示字符串。如n=3000,M=16,输出16进制下3000的表示字符串,为“BB8”

    来源:某500强企业面试题目

    思路:对n取模M,将得到的数字压入栈中,再令 n = n / M 的商。重复这一过程,可以得到每一位的数字。

    将栈内的数字出栈,并转为字符表达,凑成完整的字符串即可

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    
    //----------------------------------------
    // 将n用M进制表示并输出
    //----------------------------------------
    #define MAX_NUM 1024
    char *M_Ary(int n, int M) {
      int Ary[MAX_NUM] = {0};
      char *str = 0;
      int i = 0;
      int a = 0;
      int b = 0;
      int c = 0;
      int num = 0;
    
      
      i = 0;
      a = n;
      while (a >= M) {              // 反复取余,放入Ary数组中
        b = a % M;                  // 取余数
        a = a / M;                  // 取商
        Ary[i] = b;
        i++;
        
        if (i > MAX_NUM-1) return 0;// 如果越界,返回NULL
      }
      Ary[i] = a;
    
      num = i + 1;                  // 获得数组长度
      str = (char*)malloc(num + 1); // 创建字符串
      if (!str) return 0;           // 如果创建失败,返回NULL
    
      memset(str, 0, num + 1);      // 清空字符串
    
      for (i = 0; i < num; i++) {   // 倒序将Ary数组的数字放入str中
        c = Ary[num - i - 1];
        if (c < 10) {      
          str[i] = '0' + c;         // 如果是 0-9,则输出数字
        } else {      
          str[i] = 'A' + (c - 10);  // 如果是 > 10,则输出A-Z
        }
      }
    
      return str;
    }
    
    //-------------------------------------------------------------------------
    
    void TestM_Ary(void) {
      int n, M;
      char *str = 0;
    
      n = 10;
      M = 2;
      str = M_Ary(n, M);
      printf("M_Ary(%d, %d) = %s\n", n, M, str);
      free(str);
    
      n = 100;
      M = 8;
      str = M_Ary(n, M);
      printf("M_Ary(%d, %d) = %s\n", n, M, str);
      free(str);
    
      n = 3000;
      M = 16;
      str = M_Ary(n, M);
      printf("M_Ary(%d, %d) = %s\n", n, M, str);
      free(str);
    }
    
    //-------------------------------------------------------------------------
    
    int main(int argc, char *argv[]) {
      TestM_Ary();
    
      getchar();
      return 0;
    }
    Technorati 标签: C语言,面试题
  • 相关阅读:
    9.算术运算符
    7.字符串格式化
    下载和配置JDK
    Set-常用API及详解
    List-ApI及详解
    电路交换、报文交换、分组交换比较
    集合之List—ArrayList
    java的getClass()函数
    Object类、包装类、内部类详解
    接口的探究
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/2169301.html
Copyright © 2020-2023  润新知