能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。
全部博文(399)
分类: LINUX
2009-11-17 15:34:39
123=1×102+2×101+3×100
一般来说,对R的进制数N,其绝对值可以用各位的数码乘以R的幂:
N=an×Rn+an-1×Rn-1+…+a0×R0
来表示。这里R可以是正数也可以是负数。当R是负数时,我们称之为负权数。不论R是正数还是负数,我们都采用{0,1,…,|R|-1} 这|R|个数码来表示R进制数的个位。如果|R|>10 我们还将使用大写字母来表示编码。例如,对16进制数来说,A表示10,B表示11,……,F表示15。
使用负权数的一个好处是在表示负数时,我们不需要用到负号“-”。举例来说,10进制数-15用-2进制数来表示就是110001:
-15=1×(-2)5+1×(-2)4+0×(-2)3+0×(-2)2+0×(-2)1+1×(-2)0
请设计一个程序,读入10进制数和负数R,输出这个10进制数的R进制的形式。
输入输出样例:
Simple input |
Output for the input |
30000 -2 -20000 -2 28800 -16 -25000 -16
|
11011010101110000 1111011000100000 19180 7FB8 |
解:
对于任意R大于0的数都可以用下面公式将十进制数N转换为R进制:
N=an×Rn+an-1×Rn-1+…+a0×R0
当R小于0,N大于0时:
N=an×|R|n+an-1×|R|n-1+…+a0×|R|0
设其中的一项为ap×Rp且ap不等于0则:
当p为单数时:ap×Rp=Rp+1+(|R|- ap) Rp,既第p为变为|R|-ap并向高为进1
当p为偶数时:ap×Rp不变
当R小于0,N小于0时:
同理可得:
当p为偶数时:ap×Rp=Rp+1+(|R|- ap) Rp
当p为单数时:ap×Rp不变