简单LinuxC程序关于实现进制转换

题目: 请编写一个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] = '\0';   //字符串以'\0'结尾


	strl = strlen(remainder);


	printf ("转换后的%d进制结果为:",n);
	for (i = strl - 1;i >= 0 ;i-- )
	{
		printf ("%c",remainder[i]);    //输出时,从后向前输出
	}
	printf ("\n");


	return 0;
}


int main()
{
	int num,n;
	printf ("input a nuber:");
	scanf ("%d",&num);
	printf ("请选择进制,输入一个2~10或16的数,进制为:");
	scanf ("%d",&n);
	radix (num ,n);


    return 0;
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值