输入格式
输入包含一个非负整数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;
}