我做了一个小程序来确定用户提供的整数的长度:
#include <iostream>
using namespace std;
int main()
{
int c=0; //counter for loop
int q=1; //quotient of number upon division
cout << "Hello Cerberus! Please enter a number." << endl;
cin >> q;
if(q > -10 && q < 10)
{
cout << "The number you entered is 1 digit long." << endl;
}
else
{
while(q != 0)
{
q=q/10;
c++;
}
cout << "The number you entered is " << c << " digits long." << endl;
}
return 0;
}
除非数字太大,否则效果很好。一旦输入长度为13位左右,程序默认为&#34;您输入的数字长度为1位数&#34; (除非数字在-10到10之间,否则它不应该提供该解决方案。)
是否存在用户输入整数的长度限制,或者是否证明了我的计算机的内存限制?
答案 0 :(得分:2)
这是您计算机架构的一个限制。每种数字类型都有一个固定的上限,因为该类型描述了具有固定大小的数据。例如,您的int
可能会占用内存中的四个或八个字节(取决于CPU;根据您的观察结果,我说前者),并且只有很多位组合它可以存储在很多字节的内存中。
您可以使用std::numeric_limits
确定平台上int
的范围,但我个人建议坚持使用固定宽度类型的别名(例如int32_t
,int64_t
)并选择适合您申请的范围。
或者,确实存在所谓的&#34; bigint&#34;这些库本质上是包装整数数组的类,并添加了聪明的功能,使任意大的值像算术类型一样工作。虽然这对你来说可能有点过头了。
不要试图开始使用浮点类型(float
,double
)来提升魔法范围的能力;就像积分类型一样,它们的精度基本上是有限的,但使用浮点类型会在顶部增加额外的问题和关注点。
但用户输入没有根本限制。这是因为您的流正在转换文本字符,并且您的流基本上可以包含尽可能多的文本字符。在那个级别,你实际上只受可用内存的限制。