【腾讯2015校园招聘技术类】第24题

题目:请设计一个函数可以把10进制的正整数转换为4位定长的36进制字符串

36进制的规则为:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

举例说明:

1="0001"

10="000A"

20="000k"

35="000Z"

36="0010"

100="002S"

2000="01JK"

代码如下

#include<iostream>
using namespace std;
char* tenTo36(int key)
{
  char *num36=new char[5];
  num36[0]=num36[1]=num36[2]=num36[3]='0';
  num36[4]='\0';
  int i=3;
  int tmp=key;
  while(i>=0&&tmp>0)
  {
     num36[i--]=(tmp%36>9)?('A'+tmp%36-10):('0'+tmp%36);
tmp=tmp/36;
  }
  return num36;
}
int main(void)
{
cout<<"输入十进制数"<<endl;
int key;
cin>>key;
char * tmp=new char[5];
tmp=tenTo36(key);
printf("%s\n",tmp);
return 0;
}

上面这种方法是一个很通用的方法:

那么下面对上面算法改进,使其适应任何进制

#include<iostream>
using namespace std;
char* tenTo36(int key)
{
printf("您要变成几进制(2到36进制)?\n");
int scale;
scanf("%d",&scale);
if(scale>=2&&scale<=10)
{
char *num36=new char[9];
for(int i=0;i<=7;i++)
num36[i]='0';
num36[8]='\0';
int i=7;
int tmp=key;
while(i>=0&&tmp>0)
{
num36[i--]='0'+tmp%scale;
tmp=tmp/scale;
}
return num36;
}
else
{
char *num36=new char[5];
for(int i=0;i<=3;i++)
num36[i]='0';
num36[4]='\0';
int i=3;
int tmp=key;
while(i>=0&&tmp>0)
{    
{
num36[i--]=(tmp%scale>9)?('A'+tmp%scale-10):('0'+tmp%scale);
tmp=tmp/scale;
}
}
return num36;
}

}
int main(void)
{
cout<<"输入十进制数"<<endl;
int key;
cin>>key;
char * tmp;
tmp=tenTo36(key);
printf("%s\n",tmp);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值