【问题标题】:How to convert negative number to base P in C++如何在 C++ 中将负数转换为基数 P
【发布时间】:2016-09-18 16:03:20
【问题描述】:

我有整数num,它可以是负数或正数,我还有数字 P (1

我想做的是将num转换为base-P。

num > 0时我很容易做到:

int i = 0;
int A[10000];
while (num != 0)
{
    A[i] = num % p;
    num /= p;
    i++;
}

但是num < 0的时候不知道怎么实现。

【问题讨论】:

  • 好吧,我认为这个问题与所提到的问题并不重复,因为在表示任何以 p 为底的数字时,主要问题在于您如何说负数是在 base- p 系统。
  • 我的问题与@πάντα 标记的问题完全不同
  • 嗯,你的问题是不同的,但那里的答案也应该回答你的问题。模运算的符号是实现定义的。
  • 只需向其添加“负”标志,除非您真的真的想将-1 以基数 4 存储为“3333333333333333333333333333333333...”(计算机使用二进制数的方式)。跨度>

标签: c++ binary


【解决方案1】:

检查数字是正数还是负数,并在代码中记住这一点。如果它是负数 - 将数字乘以 -1 并执行与正数相同的操作。当你输出数字时,你应该先这样做:

if (sign == -1)
    cout << '-';

然后写下剩下的数字。

【讨论】:

  • 据我观察,标志应在操作开始前存储。但是,当操作 num 时,它不必为正,条件仍然成立,即使使用负数,% 仍然给出正数。为你 +1
  • 是的,当数字为负数时,我们应该将它乘以-1,但是应该改变整个转换逻辑。例如,如果我们想将负十进制转换为二进制,我们应该这样做:假设我们有 -48。 48 = 110000 -48 = 001111 + 000001 = 1010000
  • @hasan83: 不,-7%3 == -1 所以它实际上会给出一个负数。
  • 我认为你是对的。我的假设不适用于所有数字!
  • 我认为这是唯一的解决方案。即使是为了好玩也没有其他解决方案。对吗?
【解决方案2】:

- 符号对于基础10 来说并不是什么特别的东西。一般来说,如果90base{10} = 1011010base{2} 那么-90base{10} = -1011010base{2}。您在这里所做的是二进制补码的扩展。二进制补码是一种在不使用- 的情况下用二进制表示正数和负数的方法,用于计算。只需检查数字是正数还是负数并加上负号。您可以用于检查 Adrian 的答案。但是,您也可以使用函数代码返回 -1 用于负值,0 用于零,1 用于 x 的正值

int status (int x) {
  int sign = (x > 0) - (x < 0); 
  return sign;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2019-05-18
    • 2021-02-03
    • 2011-04-20
    相关资源
    最近更新 更多