#T0082. 负进制转换
0
负进制转换
题目描述
日常生活中我们使用十进制计数,而计算机内部常用二进制。事实上,进制的基数并不一定是正数。当基数 为负数时,同样可以用“除基取余”的方法表示任意整数,而且有一个神奇的性质:负进制表示负数时不需要负号,每一个整数在给定的负基数下都有唯一的不带负号的表示。
给定一个整数 和一个负基数 ,请你输出 的 进制表示。
数码规定如下:
- 数值 用字符
0~9表示; - 数值 用大写字母
A~F表示。
输出的表示结果中不允许出现负号;当 时输出一个字符 0。
输入格式
一行,两个整数 和 ,用空格分隔。其中 一定是负数。
输出格式
一行,一个字符串,表示 的 进制表示。
样例输入1
-15 -2
样例输出1
110001
样例输入2
-2147483648 -16
样例输出2
80000000
数据范围与约定
提示
C++ 中整数除法向零取整,当被除数 为负时,余数 也会是负数。若 ,进行如下修正即可保证余数落在 内:
- (即 )
- 商
修正后仍然满足 。反复除基直到商为 ,把余数倒序输出即可。注意 超出 32 位有符号整数的正数范围,请使用 long long。
冀公网安备13098402000493号