【发布时间】:2014-01-10 10:17:05
【问题描述】:
我编写了这个函数来计算并返回传递给函数的数字的位数或长度。在你告诉它计算一个超过 10 位数字的数字之前,它的效果很好。在这些情况下,它只返回 1。
int digits(int z)
{
int counter = 1;
for ( double y = 9; z > y; y = (y*10) + 9)
{
counter++;
}
return counter;
}
【问题讨论】:
-
我能知道失败的号码是多少??并确保您没有超过 C++ 中允许的 int 范围。
-
你实际上不能告诉这个函数对这么大的数字做任何事情,因为你不能传递这么大的数字。
-
我想我明白了。如果我将函数及其参数声明为 double 会起作用吗?
-
@user3035328 取决于其余代码。如果您只是将整数从调用者转换为双精度,它仍然不会,否则是的(舍入错误除外)
-
@user3035328 它会增加范围,但是如果您对整数感兴趣,那么您可能想要使用
long long或std::int64_t(这很可能会更快,您不会有担心舍入错误)。