/* 题目描述: 编写一个NumConvert函数,要求声明为int NumConvert(int n, int k); 功能是把传入的参数n按照k进制进行转换并输出结果 输入: 按参数传递,2<=k<=36,n在int的范围内 输出: 按参数传递输入,通过标准输出,输出相应的结果 输出的结果应当不包含换行 如果超出10,应当用大写字母依次表示 函数执行成功则应当返回0值 样例输入: 2 2 9 4 31 16 -31 16 样例输出: 10 21 1F -1F 其它: 请不要写上main函数 难度:for beginner */ #include <cstdio> int NumConvert(int n, int k) { char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char result[100] = {0}; int i = 0; unsigned num = n; // 这题就这里需要特别注意 // 要用一个比int范围大的变量类型来装要转换的数 // 因为int最小值的绝对值要比最大值大1, 无法对最小值求反 // 而且要特别特别注意的是, 不能用long, 因为在现在的编译器里long和int是一样大的!! 都是4个字节!! if( n < 0 ) { num = -n; printf("-"); } do { result[i] = digits[num % k]; num /= k; i++; } while( num != 0 ); for( i--; i >= 0; i-- ) printf("%c", result[i]); return 0; }