腾讯笔试题---
问题描述:请设计一个函数可以把十进制的正整数转换为4位定长的36进制字符串。
36进制的规则为:“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
举例说明:
1=‘0001’10=‘000A’
20=‘000K’
35=‘000Z’
36=‘0010’
100=‘002S’
2000=‘0IJK’
C代码实现:<pre name="code" class="cpp">#include<stdio.h>
#include<string.h>
void transfer(int N)
{
if(N<10)
{
printf("%04d",N);
}
/* if(N>=10&&N<=35)
{
int i;
char name[36];
char ch='A';
for(i=10;i<36;i++)
{
name[i]=ch;
ch++;
}
printf("\"");
printf("%04c",name[N]);
printf("\"");
}*/
if(N>=10&&N<=35)
{
printf("\"");
printf("%04c",(char)(N+55));
printf("\"");
}
if(N>35)
{
int name1[10];
int i=0;
int j;
while(N>0)
{
name1[i++]=N%36;
N=N/36;
}
printf("\"");
if(i==1)
printf("000");
if(i==2)
printf("00");
if(i==3)
printf("0");
for(j=i-1;j>=0;j--)
{
if(name1[j]<10)
printf("%d",name1[j]);
if(name1[j]>=10&&name1[j]<36)
printf("%c",(char)(name1[j]+55));
}
printf("\"");
}
}
int main()
{
int N;
scanf("%d",&N);
printf("%d",N);
printf("=");
transfer(N);
return 0;
}
总结:在进制转化中,可以使用递归进行转化,同样也可以使用循环进行转换。
<pre name="code" class="cpp">#include<stdio.h>
#include<string.h>
void transfer(int N)
{
if(N<10)
{
printf("%04d",N);
}
/* if(N>=10&&N<=35)
{
int i;
char name[36];
char ch='A';
for(i=10;i<36;i++)
{
name[i]=ch;
ch++;
}
printf("\"");
printf("%04c",name[N]);
printf("\"");
}*/
if(N>=10&&N<=35)
{
printf("\"");
printf("%04c",(char)(N+55));
printf("\"");
}
if(N>35)
{
int name1[10];
int i=0;
int j;
while(N>0)
{
name1[i++]=N%36;
N=N/36;
}
printf("\"");
if(i==1)
printf("000");
if(i==2)
printf("00");
if(i==3)
printf("0");
for(j=i-1;j>=0;j--)
{
if(name1[j]<10)
printf("%d",name1[j]);
if(name1[j]>=10&&name1[j]<36)
printf("%c",(char)(name1[j]+55));
}
printf("\"");
}
}
int main()
{
int N;
scanf("%d",&N);
printf("%d",N);
printf("=");
transfer(N);
return 0;
}