题目描述

给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数

输入描述:

输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。

输出描述:

为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例1

输入: 7 2
输出: 111

题目分析:

  • 本题是要进行进制转换,根据输入进制数将M (十进制数) 转换为N进制。这里要注意负数的特殊处理。这里要特别注意,给的输入用例中没有说明负数的输出方式,如果是平时刷题,可能平台还会给出未通过的测试用例,我们看完之后把代码一修改就好了,但是笔试的时候未通过的测试用例不会给出,这就需要大家去猜测了,很磨人啊,所以各位还是要多刷题啊,才能见多识广~~~
  • 这里参考其他解题思路,采用一个string table来进行进制数输出映射,按照字符串处理进行输出比较方便。首先一进来我们要先判断正负数。如果是负数就把他转换为正数处理标志flag更改为true;否则flag = false,表明它是正数。(这里我是先不知道负数如何处理的,考虑负数是补码存储比较复杂,先按正数跑完代码未通过的测试用例就告诉了负数的处理方式(输入4 3, 输出-11),从而可见他是直接先按正数处理,如果是负数就在前面添加‘-’就好好了)
  • 标识完正负数后,m%n和table之间进行映射,将结果放到字符串res中(res += table[m%n]);最后m进行更新(m /= n)。当m不为0时循环继续。
  • 最后根据flag值看是否需要加‘-’,由于我们计算数据时是从低位开始计算的,res中保存的的结果是逆序的,故我们翻转整个字符串res就得到最终结果了。

代码如下:

#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){    string table = "0123456789ABCDEF", res;    int m, n;    cin >> m >> n;    //标记负数,将负数转换为正数统一处理,最后根据标记输出负数时加上‘-’号    bool flag = false;    if(m < 0)    {        flag = true;        m = 0 - m;    }    while(m)    {        res += table[m%n];        m /= n;    }    if(flag)        res += '-';    reverse(res.begin(), res.end());    cout << res << endl;    return 0;}
©著作权归作者所有:来自51CTO博客作者星辰之洛的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. PHP类与对象的基础概念
  2. Python学习系列之 xrange和range的区别!
  3. PHP数组常用函数
  4. PHP字符串常用函数
  5. Linux系统性能监控工具Tsar
  6. PHP初级知识本地搭建和常用标签类型
  7. PHP运算符、分支及循环
  8. 跟自己的战斗
  9. php数据类型

随机推荐

  1. Android(安卓)Support V4, V7, V13的作用
  2. [置顶] android ANR
  3. Android(安卓)Studio下Ndk开发踩过的坑以
  4. android 数据存储之 SharedPreference
  5. Android实践之ScrollView中滑动冲突处理
  6. 2016总结+2017计划
  7. XposedHook:hook敏感函数
  8. Android(安卓)反编译
  9. 如何把Eclipse工程导入到Android(安卓)St
  10. Android单元测试之Robolectric