在这个程序中,当我给出的值大于10 ^ 10时,循环终止并输出错误。
#include<iomanip>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<vector>
using namespace std;
int main()
{
vector<long int>v;
long int x;
int i=5;
while(i)
{
cin>>x;
v.push_back(x);
i--;
}
for(long int i=v.size()-1;i>=0;i--)
{
cout<<fixed<<setprecision(4)<<sqrt(v[i])<<endl;
}
return 0;
}
答案 0 :(得分:3)
显然你超出了long
的价值范围。
该标准保证long
至少32位。由于2 10 = 1024 =大约1000,所以2 32 = 2 2 ×(2 10 ) 3 =大约4×10 9 值。其中一半为负数,因此最小位数的上限值约为2×10 9 。
使用64位long
的实现,您不会超出其范围(您能快速计算近似范围吗?)。
关于
“当我给出大于10 ^ 10的值时,循环终止
不,循环不会终止。但由于输入操作失败cin
处于故障模式,导致所有进一步的输入操作被忽略。
答案 1 :(得分:-1)
这是因为你超过了Long int的最大限制,这个表可能会有所帮助。
char 1字节-128到127或0到255
unsigned char 1 byte 0 to 255
签名字符1字节-128到127
int 2或4字节-32,768至32,767或-2,147,483,648至2,147,483,647
unsigned int 2或4字节0到65,535或0到4,294,967,295
短2个字节-32,768到32,767
无符号短2字节0到65,535
长4字节-2,147,483,648到2,147,483,647
无符号长4字节0到4,294,967,295
在您的代码中尝试使用long long int。这可能有用,我不知道它的范围。