概述
题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制(2~10,16)的字符串输出
在这个问题中,最主要的点是如何获取每一个位上的值,并将之转化为字符。我使用了取余数的方法,让这个数对相应的进制数取余,然后除以这个进制,由于整型除以整型得到的还是整型,所以这样每一次操作后得到的都是每一位上的值。
接下来就是把数字转化为字符,字符数字与相对应的数字的ASCLL码相差48,即字符0。将数字加上字符0得到的就是相对应的字符数字。在转化16进制时,因为9以后的数字以字母表示,转换时,数字要加上87,即字符a减去10。
C语言中用到这种转化的地方很多,比如将小写字母转化为大写字母,就是小写字母减去32,即('a' - 'A')。我们并不需要刻意去背ASCLL码表,也很难记住。我们只要知道字符的表示原理,就可以轻松实现这些转化。
#include <stdio.h>
#include <string.h> //关于字符数组的函数定义的头文件
int radix (int num ,int n)
{
char remainder[1000];
int i = 0;
int strl;
int temp;
while (num != 0)
{
temp = num % n; //获取对应进制每一位的值
if (temp < 10)
{
remainder[i++] = temp + '0'; //将数字转换为字符数字
num /= n; //一位一位转换
}
else
{
remainder[i++] = temp + 'a' - 10; //16进制时,10以上的数对应ASCII 码要加87,即'a'-10
num /= n;
}
}
remainder[i] = '