为什么此函数的计数不会超过 10 位?

Why won't this function count more than 10 digits?

本文关键字:函数 为什么      更新时间:2023-10-16

我编写这个函数来计算并返回传递给函数的数字的位数或长度。它工作得很好,直到你告诉它计算超过 10 位数字的数字中的数字。在这些情况下,它只返回 1。

int digits(int z)
{
  int counter = 1;
  for ( double y = 9; z > y; y = (y*10) + 9)
  {
    counter++;
  }
return counter;
}

目标计算机上的整数很可能是 32 位。 如果带符号,整数的值介于(大约)-20 亿和 +20 亿之间。 任一极端的长度均为 10 位数字。

您可以更改代码以使用 64 位整数以获得更多里程。 否则,您将需要使用自定义表示形式(即,编写自己的大整数类)以允许任意大的数字。

4 字节整数的范围是从 –2,147,483,6482,147,483,647

如果您指定任何小于 2,147,483,647 的正数,那么它将计算它,否则它将返回 1。

我认为您应该检查范围。至于int,它是-2,147,483,648到2,147,483,647任何小于下限的数字,即 -2,147,483,648 或任何大于上限的数字,即 2,147,483,647 将产生 1 的结果。您在问题中指定的。单击此处了解详细信息。

您的代码中有问题:

  1. 不考虑负值
  2. 使用浮点

要解决 1.:你需要一个绝对值:int u = std::abs(z)。

注意: 未定义最负整数的绝对值。

要解决 2.:递增计数器,如果 10 <= u,则递减 u。之后,您可以将循环与 int y 和 u 一起使用。

此外:您正在执行的测试很可能是传递负数,这是由于乘以 10 时溢出。