进制转化算法(C++实现)——创新工场笔试归来

      10月17号晚上参加了创新工场的校园招聘笔试,题目很少,时间是一个小时。很多题目像是智力测验,想我这种反应慢的人实在是不适合参加创新工厂的考试。最后一道题是一道编程题。我之前没写过类似的程序,答得很差。回到宿舍后,我将这道题做了出来与大家分享。想加入创新工场的青年可以参考一下。

 

题目大致是这样的:编程实现将十进制的整数转化成任意进制的整数,用户输入一个十进制数R和想要转化的进制数X,程序输出转换后的X进制的整数。

算法思想:将十进制数R与进制X取模,即R%X的值作为X进制整数的倒数第一位,然后使R等于R/X,再取R%X的值作为X进制整数的倒数第二位......依次类推,直到最后R/X=0为止。

 

例如:

R      X      输出

3      2       11

12    8       14

31    16     1f

注意:1<X<17。

 

下面是我用C++实现的代码,程序在visual C++ 6.0 上运行过了。程序不足之处是没有用户的安全输入检查。

 

#include <iostream>
#include <string>
using namespace std;

 

/*将一个整型数字转化成字符型数字,例如 8->'8',12->'c'*/
void numToChar(char &num)
{


 /*num是0到9之间的数字*/
 if(num<=9&&num>=0)
 {
  num+=48;
 }

 

 /*num是10到15之间的数字*/
 else
 {
  switch(num)
  {
  case 10:num='A';
  case 11:num='B';
  case 12:num='C';
  case 13:num='D';
  case 14:num='E';
  case 15:num='F';
  }
 }
}

 

/*进制转化函数——r表示需要被转化的十进制数,x表示进制(1<x<17)*/
void decimalTransmit(int r,int x)
{
 string result;//保存x进制数
 char temp;
 while(r>0)
 {
  temp=r%x;
        numToChar(temp);
  result+=temp;
  r=r/x;
 }
 
 /*输出转化后的x进制整数*/
 for(int i=result.size()-1;i>=0;i--)
  cout<<result[i];
 cout<<endl;
}

 

int main()
{
 int R,X;
 cout<<"请输入一个十进制数和要转化的进制(用空格作为间隔符):";
 cin>>R>>X;
 decimalTransmit(R,X);
 return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值