
正文
一道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 1024char *M_Ary(int n, int M) { }; ; ; ; ; ; ; i = ; a = n; while (a >= M) { // 反复取余,放入Ary数组中 b = a % M; // 取余数 a = a / M; // 取商 Ary[i] = b; i++; ) ;// 如果越界,返回NULL } Ary[i] = a; num = i + ; // 获得数组长度 str = (); // 创建字符串 ; // 如果创建失败,返回NULL memset(str, , num + ); // 清空字符串 ; i < num; i++) { // 倒序将Ary数组的数字放入str中 c = Ary[num - i - ]; ) { str[i] = ' + c; // 如果是 0-9,则输出数字 } else { str[i] = ); // 如果是 > 10,则输出A-Z } } return str;}//-------------------------------------------------------------------------void TestM_Ary(void) { int n, M; ; n = ; M = ; str = M_Ary(n, M); printf("M_Ary(%d, %d) = %s\n", n, M, str); free(str); n = ; M = ; str = M_Ary(n, M); printf("M_Ary(%d, %d) = %s\n", n, M, str); free(str); n = ; M = ; 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(); ;}






