本文主要是介绍负权数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 问题描述
当我们写一个10进制正数时,其值可以用各位的数码乘以10的幂来表示。例如:
123=1 +2 +3
一般来说,对R进制数N,其绝对值可以表示为:
N=
这里R可以是正数也可以是负数。当R是负数时,我们称之为负权数。使用负权数的一个好处是在表示负数时,我们不需要用到符号“-”。举例来说,10进制-15用-2进制数来表示就是110001。
请设计一个程序读入10进制数和负数R,输出这个10进制数的R进制的形式。
输入格式:
数据从文本文件NEGNATIVE.IN中输入,文件由若干行组成。每行有两个整数n(-32768 n32767)和R(-16R-2)。如数的最后一行只有一个字符“#”,表示输入结束。
输出格式:
结果输出到文本文件NEGNATIVE.OUT中,每行为n的R进制形式。
输入输出样例:
Sample input | Output for the input |
30000 -2 -20000 -2 28800 -16 -25000 -16 # | 11011010101110000 1111011000100000 19180 7FB8 |
2 问题分析
当R2时,通过连除取余,余数反排法可以得到一个10进制正整数N 的R进制形式。但当R-2时,N Z时,是否还能用此法求N的R进制形式呢?显然不行,因为连除取余,余数反排法只适用于正整数除法为此,我们必须另寻方法。
我们首先讨论当N>0的情况。
R-2
|R| 2
N=
(p为奇数)
(p为偶数)
可以根据以上两式先得到|N|的|R|进制形式,然后再转化为N的R进制形式。
而当N<0时则有
N=
(p为奇数)
(p为偶数)
也可以根据以上两式先得到|N|的|R|进制形式,然后再转化为N的R进制形式。
这篇关于负权数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!