整数的不同值
Different values for integer
正在尝试在集合 st 和 st1 中插入数字的平方和立方值。 (设 n = 10^7)。
打印后,由于整数限制,集合 st 具有负值,但集合 st1 中没有负值,即使 'i' 和 'temp' 都是整数。
int n;
cin >> n;
int temp = 2;
set<int> st;
set<int> st1;
while ((temp * temp) < n)
{
st.insert(temp * temp);
if ((temp * temp * temp) < n)
{
st.insert(temp * temp * temp);
}
temp++;
}
for(int i=1;i*i<n;i++){
st1.insert(i * i);
}
for(int i=1;i*i*i<n;i++){
st1.insert(i* i * i);
}
for(auto ss : st){
cout<<ss<<" ";
}
cout<<"\n\n";
for(auto s : st1){
cout<<s<<" ";
}
}
如果 temp * temp
溢出类型,temp * temp < n
的行为未定义。通常会观察到负数环绕,但即使使用这样做的体系结构,也允许优化编译器假设如果 a + c < b + c
用于常量 c
则 a < b
.
temp < n / temp
是一种不受溢出影响的常见重构。您当然需要检查 non-zero temp
.
一旦第一个立方体达到 10^7,您的 for 循环就会停止。
但是您的 while 循环会继续,直到第一个平方达到 10^7。此时(n=3163)立方体已经超过INT_MAX.
正在尝试在集合 st 和 st1 中插入数字的平方和立方值。 (设 n = 10^7)。
打印后,由于整数限制,集合 st 具有负值,但集合 st1 中没有负值,即使 'i' 和 'temp' 都是整数。
int n;
cin >> n;
int temp = 2;
set<int> st;
set<int> st1;
while ((temp * temp) < n)
{
st.insert(temp * temp);
if ((temp * temp * temp) < n)
{
st.insert(temp * temp * temp);
}
temp++;
}
for(int i=1;i*i<n;i++){
st1.insert(i * i);
}
for(int i=1;i*i*i<n;i++){
st1.insert(i* i * i);
}
for(auto ss : st){
cout<<ss<<" ";
}
cout<<"\n\n";
for(auto s : st1){
cout<<s<<" ";
}
}
如果 temp * temp
溢出类型,temp * temp < n
的行为未定义。通常会观察到负数环绕,但即使使用这样做的体系结构,也允许优化编译器假设如果 a + c < b + c
用于常量 c
则 a < b
.
temp < n / temp
是一种不受溢出影响的常见重构。您当然需要检查 non-zero temp
.
一旦第一个立方体达到 10^7,您的 for 循环就会停止。 但是您的 while 循环会继续,直到第一个平方达到 10^7。此时(n=3163)立方体已经超过INT_MAX.