从2019.12.15开始至明年秋招,每天刷一道算法真题,冲冲冲!
通过博客总结每一题的经验,方便后续复习。
进制间转换
此题为小米2019年校招题真题
1、题目描述
设计一个函数, 可以将任意十进制的数, 转换成任意2到9的进制表示的形式
输入描述:
需要转换的数字x(0<=x<=1e18) 转换使用的进制k(2<=k<=9)
输入描述:
对应进制的结果
示例
输入:
33 2
输出:
100001
开始编程
2、程序设计与实现
在解析面试算法题时应当注意,快速阅读题目描述,务必结合示例一起看,可以在短时间内摸清要求。
解算法题时,尤其是在编程时,千万不要人为地添加一些提示语句,比如“请输入XXX”、“输出为xxx”,这样会极大地影响程序的通过率,尤其是机试。题目给的示例里面输入是什么,就只输入什么;同样的,输出是什么,就只输出什么,反正你写的程序又不给其他人看,最终都只是计算器帮你测试,所以请务必要记住这一点。
进制间转换这一道题的思路十分简单。进制转换的原理大家都知道,就是除k取余。第一次除k后,余数保留,将所得的商作为被除数再进行除k取余,不断重复,直到所得商等于0为止。
重复除x取余,很明显就是使用循环实现。每一次得到的余数都存放在一个整型数组里面。当商=0时结束循环,然后再从数组最末尾开始依次向前输出每一个数组元素,得到目标进制值。应当注意的是在本题中存放用户输入的数值的变量x应当设置为长整型long。错误机制为当x=0时,输出为0。
代码
C语言实现
#include<stdio.h>
int main()
{
long x;
int k,a[80],i=0;
scanf("%ld %d\n",&x,&k);
if(x>0 && k>=2 && k<=9)
{
for(i;x>0;i++)
{
a[i]=x%k;
x=x/k;
}
i--;
for(;i>=0;i--)
{
printf("%d",a[i]);
}
}
else
printf("0");
return 0;
}
运行时间:2ms,占用内存:367k