算法训练——进制间转换

从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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值