C语言 十进制数转十六进制数 进制转换

感情迁移 提交于 2020-02-04 08:14:01

问题描述

十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。
  
输入格式
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
  
输出格式
  输出这个整数的16进制表示
  
样例输入
30

样例输出
1E

代码呈上:

#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
	int n;          //输入的十进制数 
	int yu[200];    //用来存放余数 
	int lenyu = 0;  //余数数组的长度 
	char num[200];
	scanf("%d",&n);
	if(n==0)
	{
		yu[0]==0;
		lenyu++;
	 }
	else
	{
		for(int i = 0; n > 0; i++ )
		{
			yu[i]=n%16;
			n=n/16;
			lenyu++;
		}
	 }
	
	for(int j=0;j<lenyu;j++)
	{
		switch(yu[j])
		{
			case 0:num[j]='0';break;
			case 1:num[j]='1';break;
			case 2:num[j]='2';break;
			case 3:num[j]='3';break;
			case 4:num[j]='4';break;
			case 5:num[j]='5';break;
			case 6:num[j]='6';break;
			case 7:num[j]='7';break;
			case 8:num[j]='8';break;
			case 9:num[j]='9';break;
			case 10:num[j]='A';break;
			case 11:num[j]='B';break;
			case 12:num[j]='C';break;
			case 13:num[j]='D';break;
			case 14:num[j]='E';break;
			case 15:num[j]='F';break;			
		}
	 } 
	
	 for(int i =lenyu -1; i>=0; i--)
	 	printf("%c",num[i]);
	return 0;
}

方法2

#include <stdio.h>
 
/*输入一个十进制整数(可能大于15),转化为十六进制输出*/
/*十进制转十六进制,方法:除16取余数倒排*/
char* convert(int x)
{
	static char hexchars[] = "0123456789ABCDEF";  
	static char str1[81], str2[81], * p = str1, * q = str2;
	static int n = 0;                    //计算字符长度,为倒排做准备
	//str1  存储取余数组,  str2倒排存储数组
	while (x)   //取余                   
	{
		*p++ = hexchars[x % 16];
		x /= 16;
		n++;
	}
	p--;                  //指针回退
	while (n)            //倒排
	{
		*q++ = *p--;
		n--;
	}
	return str2;
}
 
int main()
{
	int x;
	printf("请输入一个十进制数:\n");
	scanf("%d", &x);
	printf("对应的十六进制数是:%s\n", convert(x));
	return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!