为什么此函数的计数不会超过 10 位?
Why won't this function count more than 10 digits?
我编写这个函数来计算并返回传递给函数的数字的位数或长度。它工作得很好,直到你告诉它计算超过 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,648
到 2,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.:你需要一个绝对值:int u = std::abs(z)。
注意: 未定义最负整数的绝对值。
要解决 2.:递增计数器,如果 10 <= u,则递减 u。之后,您可以将循环与 int y 和 u 一起使用。
此外:您正在执行的测试很可能是传递负数,这是由于乘以 10 时溢出。
相关文章:
- C++:调用没有匹配函数:为什么需要一个空的构造函数?
- 我是C++新手,我想知道,为什么在c ++中使用纯虚函数?为什么要使用纯虚函数?
- 无法重新声明构造函数.为什么?
- 通过指针调用模板类成员函数 [为什么这是有效的 c++]?
- 将指针传递给函数 - 为什么我无法打印地址?
- 我打算调用initializer_list构造函数,如果存在,则事先调用复制构造函数:为什么?
- C ++中的函数为什么我的编译器无法识别错误()
- 成员函数与友元函数:为什么是一个而不是另一个?
- 可怕的元函数:为什么它们更快?
- 调用自动构造函数:为什么我的类型不完整
- cpp 没有匹配的函数调用来调用构造函数.为什么
- POW函数为什么返回意外值
- 模板中的友元函数(为什么这在Visual Studio中失败,而不是GCC和Clang)
- 显式函数为什么
- C++构造函数初始化列表调用默认构造函数.为什么
- 未调用构造函数?为什么
- C++:自动向量重新分配调用复制构造函数?为什么
- C++ / 多态性 / 虚函数 / 为什么我的子类的函数没有被调用?
- Linux vs Windows std::map 赋值构造函数(为什么会有这样的区别?)
- 错误:使用已删除的函数.为什么?