我写了这个函数来计算并返回传递给函数的数字的位数或长度。它会很有效,直到你告诉它计算一个数字超过10位的数字。在这些情况下,它只返回1.
int digits(int z)
{
int counter = 1;
for ( double y = 9; z > y; y = (y*10) + 9)
{
counter++;
}
return counter;
}
答案 0 :(得分:2)
目标计算机上的整数很可能是32位。如果签名,则整数保持(大致)-2亿到+20亿之间的值。两个极端都是10位数。
您可以将代码更改为使用64位整数以获得更多里程。否则,您将需要使用自定义表示(即,编写您自己的大整数类)以允许任意大的数字。
答案 1 :(得分:1)
4字节int的范围是从–2,147,483,648
到2,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: 你需要一个绝对值:int u = std :: abs(z)。
注意:未定义最负整数的绝对值。
解决2: 如果10 <= u,则递增计数器并递减u。之后,您可以使用带有int和u的循环。
另外:由于10乘以10的溢出,很可能你正在进行的测试是传递负数。