为什么这个函数不会超过10位?

时间:2014-01-10 10:17:05

标签: c++ digits

我写了这个函数来计算并返回传递给函数的数字的位数或长度。它会很有效,直到你告诉它计算一个数字超过10位的数字。在这些情况下,它只返回1.

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

4 个答案:

答案 0 :(得分:2)

目标计算机上的整数很可能是32位。如果签名,则整数保持(大致)-2亿到+20亿之间的值。两个极端都是10位数。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我认为你应该检查范围。 至于int,它是 -2,147,483,648到2,147,483,647 任何小于下限的数字,即-2,147,483,648或任何大于上限的数字,即2,147,483,647,将产生1。您在问题中指定的。 click here了解详情。

答案 3 :(得分:0)

您的代码中存在问题:

  1. 不考虑负值
  2. 使用浮点
  3. 要解决1: 你需要一个绝对值:int u = std :: abs(z)。

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

    解决2: 如果10 <= u,则递增计数器并递减u。之后,您可以使用带有int和u的循环。

    另外:由于10乘以10的溢出,很可能你正在进行的测试是传递负数。