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

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

 

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

 

例如:

 

R      X      输出

 

3      2       11

 

12    8       14

 

31    16     1f

 

注意:1<X<17。

 

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

 

#include <iostream>

#include <vector>

using namespace std;

 

void numToChar(char &num)

{

 

 

 /*num是0到9之间的数字*/

 if(num<=9&&num>=0)

 {

      num+=48;

 }

 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';

  }

 }

}

 

/*进制转化函数——x表示进制,r表示十进制数*/

void decimalTransmit(int r,int x)

{

 vector<char> result;

 char temp;

 while(r>0)

 {

  temp=r%x;

        numToChar(temp);

  result.push_back(temp);

  r=r/x;

 }

 vector<char>::iterator vc_it=result.end()-1;

 for(;vc_it>=result.begin();vc_it--)

 {

  cout<<*vc_it;

 }

 cout<<endl;

}

 

int main()

{

 int R,X;

 cout<<"请输入一个十进制数和要转化的进制:";

 cin>>R>>X;

 decimalTransmit(R,X);

 return 0;

}

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/piaojun_pj/archive/2010/10/18/5948358.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值