原文地址:https://luvletter.blog.luogu.org/p1017-ti-jie

P1017 [NOIP2000 提高组] 进制转换

题目描述

我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置为指数,以 1010 为底数的幂之和的形式。例如 123123 可表示为 1×102+2×101+3×1001×101 \times 10^2+2\times 10^1+3\times 10^01×101×102+2×101+3×1001×10 这样的形式。

与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置为指数,以 222 为底数的幂之和的形式。

一般说来,任何一个正整数RRR或一个负整数 −R-R−R 都可以被选来作为一个数制系统的基数。如果是以 RRR 或 −R-R−R 为基数,则需要用到的数码为 0,1,....R−10,1,....R-10,1,....R−1

例如当 R=7R=7R=7 时,所需用到的数码是 0,1,2,3,4,5,60,1,2,3,4,5,60,1,2,3,4,5,6,这与其是 RRR 或 −R-R−R 无关。如果作为基数的数绝对值超过 101010 ,则为了表示这些数码,通常使用英文字母来表示那些大于 999 的数码。例如对 161616 进制数来说,用 AAA 表示 101010,用 BBB 表示 111111,用 CCC 表示 121212,以此类推。

在负进制数中是用 −R-R−R 作为基数,例如 −15-15−15(十进制)相当于 110001110001110001(−2-2−2进制),并且它可以被表示为 222 的幂级数的和数:

110001=1×(−2)5+1×(−2)4+0×(−2)3+0×(−2)2+0×(−2)1+1×(−2)0110001=1\times (-2)^5+1\times (-2)^4+0\times (-2)^3+0\times (-2)^2+0\times (-2)^1 +1\times (-2)^0110001=1×(−2)5+1×(−2)4+0×(−2)3+0×(−2)2+0×(−2)1+1×(−2)0

设计一个程序,读入一个十进制数和一个负进制数的基数, 并将此十进制数转换为此负进制下的数。

输入格式

输入的每行有两个输入数据。

第一个是十进制数 nnn。 第二个是负进制数的基数 −R-R−R。

输出格式

输出此负进制数及其基数,若此基数超过 101010,则参照 161616 进制的方式处理。

输入输出样例

输入 #1

30000 -2

输出 #1

30000=11011010101110000(base-2)

输入 #2

-20000 -2

输出 #2

-20000=1111011000100000(base-2)

输入 #3

28800 -16

输出 #3

28800=19180(base-16)

输入 #4

-25000 -16

输出 #4

-25000=7FB8(base-16)

说明/提示

【数据范围】
对于 100%100\%100% 的数据,−20≤R≤−2-20 \le R \le -2−20≤R≤−2,∣n∣≤37336|n| \le 37336∣n∣≤37336。

NOIp2000提高组第一题

题解

本题难度不大,主要考察进制之间的转换问题,仿照十进制转二进制的“除基取余法”的思想,可以通过将原数除以负基数求商并取余的方法实现负数进制的转换,需要注意的是这里的余数 rrr 必须为正值,记被除数和除数分别为 aaa 和 b(b<0)b(b<0)b(b<0) 根据 a=qb+ra=qb+ra=qb+r 确定商 qqq,此时商满足 aaa 为正数时绝对值向下舍入,aaa 为负数时绝对值向上舍入,根据这一规律求得商和余数,最后把余数从后到前(从高位到低位)依次输出即可。

代码

#include <iostream>using namespace std;int main()
{int n, r, quotient, remainder;int remainderArray[33]; //32位有符号整数对应的负进制数表示法长度最长为33位(-2进制的情况下)cin >> n >> r;cout << n << '=';quotient = n;unsigned i;for (i = 0;quotient != 0;i++){remainder = quotient % r; //余数if (quotient < 0 && remainder)remainder -= r; //被除数和除数均为负数时余数也为负数,所以在求得的余数的基础上要减去除数(加上除数的绝对值)remainderArray[i] = remainder; //记录余数(为了倒序输出)quotient = quotient >= 0 ? quotient / r : quotient / r + (remainder ? 1 : 0); //商(当被除数为负数时,绝对值要向上舍入,因此最后面当余数不为0时要加上1)}for (;i > 0;i--) //倒序输出余数{int output = remainderArray[i - 1];if (output < 10)cout << output;elsecout << (char)(55 + output); //大于10的数位用大写字母表示}cout << "(base" << r << ')' << endl;return 0;
}

洛谷P1017题解 [NOIP2000 提高组] 进制转换相关推荐

  1. 信息学奥赛一本通 1820:【00NOIP提高组】进制转换 | 洛谷 P1017 [NOIP2000 提高组] 进制转换

    [题目链接] ybt 1820:[00NOIP提高组]进制转换 洛谷 P1017 [NOIP2000 提高组] 进制转换 注意:两OJ上题目内容相同,输入输出要求不同 [题目考点] 1.数制 [解题思 ...

  2. 洛谷——P1017 [NOIP2000 提高组] 进制转换(C++)

    洛谷--P1017 [NOIP2000 提高组] 进制转换(C++) 前言 前几天才参加了第十三届蓝桥杯比赛,发现居然有两道于进制相关的题,而且那道编程题--X进制减法,别说做了,题都看不懂,真的是枯 ...

  3. P1017 [NOIP2000 提高组] 进制转换

    题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置为指数,以 1010 为底数的幂之和的形式.例如 123123 可表示为 1×102+2×101+3×100 ...

  4. 【洛谷】P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布(详细代码)

    [洛谷]石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第8集中出现了一种石头剪刀布的升级版游戏. 1.[题目描述] 2 ...

  5. c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯

    题目链接 洛谷 P1003 [NOIP2011 提高组] 铺地毯 不想戳的看下图: 样例及解释 数据范围 解题思路: 从后往前找地毯,找到了我就输出并返回. 代码如下: #include <io ...

  6. 洛谷:P1033 [NOIP2002 提高组] 自由落体 C++详解

    题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,⋯,n−1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1​).已知小球下落距离计算公式为 d=0.5×g ...

  7. 洛谷P1014题解 [NOIP1999 普及组] Cantor 表

    原文地址:https://luvletter.blog.luogu.org/p1014-ti-jie P1014 [NOIP1999 普及组] Cantor 表 题目描述 现代数学的著名证明之一是 G ...

  8. 洛谷P1035题解 [NOIP2002 普及组] 级数求和

    原文地址:https://luvletter.blog.luogu.org/p1035-ti-jie 题解 本体难度不大,但要注意计算和的时候要使用double类型,千万不能使用float类型,不然会 ...

  9. 洛谷P1055题解 [NOIP2008 普及组] ISBN 号码

    原文地址:https://luvletter.blog.luogu.org/p1055-ti-jie 题解 超级简单的一题,就是要注意输入和输出的分隔符的问题以及ASCII码中0~9这10个数字对应的 ...

最新文章

  1. 基于近距离的测距感知传感器调研以及扩展介绍
  2. concat 不是可以识别的 内置函数名称。_新特性解读 | MySQL 8.0 窗口函数详解
  3. Linux下如何挂载FAT32格式USB设备
  4. 基本不等式解决乘积最大问题(洛谷P1887题题解,Java语言描述)
  5. linux单点登录命令,配置RHEV中LINUX 虚拟机使用ACTIVE DIRECTORY(AD域)实现单点登录的方法...
  6. react生命周期钩子
  7. 【软件工程】基准配置(基线配置)
  8. 搜索引擎网站登陆入口,提交入口
  9. php++数据库备份,php实现数据库备份
  10. 计算机 管理 被停用,如果电脑上出现“你的账户已被停用请向系统管理员咨询”怎么办?...
  11. cvEqualizeHist() 直方图均衡化(多通道彩图)
  12. 尚硅谷2022 jenkins教程笔记
  13. 卸载MYSQL数据库及MYSQL的安装
  14. 最小巧最简单最安全的KMS模拟器vlmcsd,最新支持Win10 server2016和Office2016!
  15. 小米路由器4a开发版固件_小米路由器4a刷第三方固件
  16. 【Java编程】写一个将华氏温度转换成摄氏温度的程序,转换的公式是:°F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度。
  17. 蚂蚁金服java二面_蚂蚁金服Java开发二面
  18. 这一年很幸运,平平淡淡的|2021 年度总结
  19. 17个国内外手机APP应用开发平台推荐
  20. Uncaught TypeError: Cannot add property 0, object is not extensible 引起的思考

热门文章

  1. NXP-RT1052入门
  2. 单阶段实例分割又一佳作!出自沈春华团队
  3. Python爬取《创造营2020》小姐姐数据用腾讯云人脸识别做颜值评分
  4. Dev-C++使用to_string()函数报错“[Error] ‘to_string‘ was not declared in this scope”原因及解决方案
  5. Codec2之建造者模式
  6. 卫星导航模拟器GSS7000测试NTRIP RTK--以Ublox F9P 为例.rtklib原始观测量解算固定解FIX
  7. WinExec(exePath,sw_XX) 调用外部程序详解
  8. 计算机主机软件,计算机上提供了哪些软件来编辑音乐
  9. enet java 可靠udp,可靠的UDP编程(ENET库)
  10. C文件操作、读写文件 C++文件读写、文件操作