为什么当我们将输入作为 long int 类型时 while 循环终止?
why while loop terminate when we take input as long int type?
在这个程序中,当我给出大于 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;
}
显然您超出了 long
的值范围。
标准保证 long
至少有 32 位。因为 210 = 1024 = 大约 1000,所以 232 = 22 × (210)3 = 大约 4 × 109 个值。其中一半是负数,所以最小位数的上限大概是2×109.
使用 64 位实现 long
你不会超出它的范围(你能快速计算出大概的范围吗?)。
关于
” When I am giving value larger than 10^10 ,loop terminate itself
不,循环不会终止。但是由于输入操作失败 cin
处于失败模式,这会导致所有进一步的输入操作被忽略。
这是因为您超出了 Long int 的最大限制,这 table 可能会有所帮助。
char 1 字节 -128 到 127 或 0 到 255
unsigned char 1 字节 0 到 255
signed char 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
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295
在您的代码中尝试 long long int 可能会起作用。这可能有用我不知道它的范围。
在这个程序中,当我给出大于 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;
}
显然您超出了 long
的值范围。
标准保证 long
至少有 32 位。因为 210 = 1024 = 大约 1000,所以 232 = 22 × (210)3 = 大约 4 × 109 个值。其中一半是负数,所以最小位数的上限大概是2×109.
使用 64 位实现 long
你不会超出它的范围(你能快速计算出大概的范围吗?)。
关于
” When I am giving value larger than 10^10 ,loop terminate itself
不,循环不会终止。但是由于输入操作失败 cin
处于失败模式,这会导致所有进一步的输入操作被忽略。
这是因为您超出了 Long int 的最大限制,这 table 可能会有所帮助。
char 1 字节 -128 到 127 或 0 到 255
unsigned char 1 字节 0 到 255
signed char 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
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295
在您的代码中尝试 long long int 可能会起作用。这可能有用我不知道它的范围。