十进制转十六进制

输入格式
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
一开始,直接找到该十进制数所能代表的十六进制的位数的最高位表示的是十六的几次方,然后根据二者关系用循环求解,第一次提交后未能满分,先发现是未考虑输入零,后又发现如若输入的刚好是16的n次方的倍数,其后的零不会表示出来,便又加了“j”变量确定应输出的数的位数,不足则补零。

#include<stdio.h>
#include<string.h> 
#include<stdlib.h>
int main()
{
	int n;
	scanf("%d",&n);
	if(n==0)
	{
		printf("%d",0);
		exit(0);
	}
	char a[100];
	memset(a,0,sizeof(a));
	long long q=1;
	int j=0;
	while(n>=q)
	{
		j++;
		q*=16;
	}
	q/=16;
	int i;
	for(i=0;n!=0;i++)
	{
		if(n<q)//一开始少了这一步导致如257这类数输出错误
		{
			a[i]='0';
			q/=16;
		}
		else
		{
 		if(n/q>0&&n/q<10)
		{
		a[i]=(n/q+'0');
		n=n%q;
		q/=16;
		}
		else
		{
			a[i]=(n/q-10+'A');
			n=n%q;
			q/=16;
		}
	}
	}
	int len=strlen(a);
	for(i=0;i<len;i++)
	printf("%c",a[i]);
	if(len<j)
	{
		for(i=len;i<j;i++)
		printf("0");
	}
	return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值