#include<stdio.h>
#include<string.h>
#define P printf
/*void printd(int n)
{
if(n<0)
{
putchar('-');
n= -n;
}
if(n/10)
{
printd(n/10);
}
putchar(n%10+'0');
}*/
/*
下面的两行代码可以推敲出 //加字符0 自动从数值转换成字符型
P("%d %d %c\n",4,'4','4'-4);
P("%d %d %c\n",5,'5','5'-5);*/
/*char* itoa_digui(int n,char* ch)
{ static int i=0;
if(n<0)
{
ch[0]=45;
n= -n;
P("%c i=%d \n",ch[i],i);
i++;
}
if(n/10)
{
itoa_digui(n/10,ch);
}
ch[i]=(n%10+'0');
P("%c i=%d \n",ch[i],i);
i++;
return ch;
}*/
char* itoa(int n,char* ch,int x)
{
int i=0,len=0,j=0;
char ch0[100]={0};
if (x<=2)
{//二进制
x=2;
while(n>=1)
{
//P("n=%d\n",n);
ch0[i]=n%x+'0';
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//二进制
else if(x>8&&x<16)
{//十进制
x=10;
while(n>=1)
{
//P("n=%d\n",n);
ch0[i]=n%x+'0';
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//十进制
else if(x>=16)
{//十六进制
x=16;
while(n>=1)
{
//P("n=%d\n",n);
if(n%x>10)
{
ch0[i]=n%x+'7';
}
else
{
ch0[i]=n%x+'0';
}
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//十六进制
ch[j]=0;
return ch;
}
void main()
{
int a=0;
char ch[100]={0};
P("请输入一个整数:\n");
scanf("%d",&a);
P("\n%s\n",itoa(a,ch,16));
/*下面三行代码显示十六进制的a的ascii=10+55 10+'7'
P("%d %d %d %c\n",10,11,12,55);
P("%d %d %d\n",'A','B','C');*/
getchar();
getchar();
}
#include<string.h>
#define P printf
/*void printd(int n)
{
if(n<0)
{
putchar('-');
n= -n;
}
if(n/10)
{
printd(n/10);
}
putchar(n%10+'0');
}*/
/*
下面的两行代码可以推敲出 //加字符0 自动从数值转换成字符型
P("%d %d %c\n",4,'4','4'-4);
P("%d %d %c\n",5,'5','5'-5);*/
/*char* itoa_digui(int n,char* ch)
{ static int i=0;
if(n<0)
{
ch[0]=45;
n= -n;
P("%c i=%d \n",ch[i],i);
i++;
}
if(n/10)
{
itoa_digui(n/10,ch);
}
ch[i]=(n%10+'0');
P("%c i=%d \n",ch[i],i);
i++;
return ch;
}*/
char* itoa(int n,char* ch,int x)
{
int i=0,len=0,j=0;
char ch0[100]={0};
if (x<=2)
{//二进制
x=2;
while(n>=1)
{
//P("n=%d\n",n);
ch0[i]=n%x+'0';
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//二进制
else if(x>8&&x<16)
{//十进制
x=10;
while(n>=1)
{
//P("n=%d\n",n);
ch0[i]=n%x+'0';
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//十进制
else if(x>=16)
{//十六进制
x=16;
while(n>=1)
{
//P("n=%d\n",n);
if(n%x>10)
{
ch0[i]=n%x+'7';
}
else
{
ch0[i]=n%x+'0';
}
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//十六进制
ch[j]=0;
return ch;
}
void main()
{
int a=0;
char ch[100]={0};
P("请输入一个整数:\n");
scanf("%d",&a);
P("\n%s\n",itoa(a,ch,16));
/*下面三行代码显示十六进制的a的ascii=10+55 10+'7'
P("%d %d %d %c\n",10,11,12,55);
P("%d %d %d\n",'A','B','C');*/
getchar();
getchar();
}