嘗試在集合 st 和 st1 中插入數字的平方和立方值。(讓 n = 10^7)。
列印后,由于整數的限制,set st 具有負值,但 set 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<<" ";
}
}
uj5u.com熱心網友回復:
如果溢位型別,則的行為temp * temp < n未定義。temp * temp通常會觀察到環繞到負數,但即使使用這樣做的架構,優化編譯器也可以假設 ifa c < b c為常量cthen a < b。
temp < n / temp是一種不受溢位影響的常見重構。你當然需要檢查非零temp。
uj5u.com熱心網友回復:
一旦第一個立方體達到 10^7,您的 for 回圈就會停止。但是你的 while 回圈會一直持續到第一個 sqare 達到 10^7。此時 (n=3163) 立方體已經超過了 INT_MAX。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472977.html
上一篇:win10找不到無線網路報錯:Windows無法自動將IP協議堆疊系結到網路配接器
下一篇:讓加入C MYSQL庫
