那麼如何創建一個函數來返回最接近9 9+ 1給予int最大值留下沒有餘數除以2 int?如何找到最接近的偶數給定的int? (給定11返回12)
回答
給定整數時,「最近」是不明確的。比如說9:8和10都是偶數,並且都接近於它。如果你想一直往上走,那麼像...
int nearestEvenInt(int to)
{
return (to % 2 == 0) ? to : (to + 1);
}
number % 2 == 0?number:number+1
另一種方式是(number>>1)<<1
但我不知道底片/小/大endians。
`(數字>> 1)<< 1`具有負值的UB。 (`>>`只是實現定義的,但`<<`未定義;它是一個有符號的算術溢出) – 2010-12-06 05:42:50
if (x %2 == 0) return x; else return x+1;
?
舍入到最近的INT:
number+=(number & 1)
回合下來,甚至
x & ~1
回合最多甚至
(x + 1) & ~1
我通常喜歡是(number+1) & ~1
的方式, 但不是每個人都認識這個成語,所以你可能不得不考慮你的audi ENCE。
特別是,如果它應該用於負整數,那麼C和C++的非二補補實現將不會識別該成語(它會將奇數負數向下舍入,而不是負號+數量級數,並且在補碼上變爲負偶數),所以在允許負輸入的情況下它不是完全可移植的。
便攜式答案是(number % 2 == 0) ? number : number+1;
,讓編譯器擔心優化。
還要小心,你還沒有定義什麼結果應該爲INT_MAX
,這是奇數,但其中並不存在較大的值,即使是int
值。
由於大多數這裏的答案要麼是不可移植或有多餘條件句,這裏是快速和便攜答案:
number += (int)((unsigned)number & 1)
到unsigned
的情況下確保了按位與預期的定義,和演員回到int
(這是定義良好的,因爲可能的位和操作的值,零或一個,適合於int
)阻止number
被提升爲unsigned
,當它被轉換回int
時,這會導致實現定義的行爲將結果分配給number
。
我知道問的int OP,但這裏有一個答案花車太:
number = Math.round(number * 0.5f) * 2; //Closest (up for middle)
number = Math.ceil(number * 0.5f) * 2; //Always Up
number = Math.floor(number * 0.5f) * 2; //Always Down
有點遲到了,但是這是一個乾淨的解決方案
n += (n % 2);
- 1. 谷歌表如何找到前3最接近列給定列
- 2. 查找最接近給定數字的數組中的數字
- 3. 如何找出其總和最接近給定數量
- 4. 查找數組最大最接近給定數數
- 5. 找到最接近的元素與給定類的JQuery
- 6. 找到給定類型的最接近的jQuery兄弟
- 7. 如何獲得給定數字的最接近,最低迴文數
- 8. C#找一個數組中最接近的所有值給出給定數量
- 9. 查找字典中與給定數字最接近的值
- 10. 最近的素數給定的整數
- 11. NumPy的:回饋與最接近給定數量
- 12. 在給定的分母範圍內找到Pi的最接近的近似值
- 13. 給定點的最近點
- 14. 給定值的最近值
- 15. PHP - 獲得最接近的數字給定一定數量?
- 16. 查找給定整數中的最大偶數
- 17. 如何從列表中找到最接近給定矩形的矩形?
- 18. 如果給定的int是2的指數,則返回#
- 19. 在數據表中找到最接近給定時間的時間戳的行
- 20. 在日期列表中查找最接近的給定日期
- 21. 如何查找給定座標的最近點
- 22. Python中找到最近的多邊形給定的點座標
- 23. Spatialite爲給定的經緯度找到最近的節點
- 24. 如何找到給定字符串中最長的迴文?
- 25. SQL - 尋找最近的價格給定的參數
- 26. 找到三個整數,其總和最接近給定數量N
- 27. 找到距文件bash中給定值最近的值
- 28. 找到最接近給定的時間記錄在Ruby on Rails的
- 29. 查找最近的時間給定數組時
- 30. Android:如何在給定的方向找到最近的鄰居(視圖元素)
這個問題是不是唯一指定。 10和12一樣接近11。你想要哪一個?那麼負數呢?並且是輸入積分還是浮點? – 2010-12-05 18:15:38
@大衛:輸入顯然是不可或缺的,但對於您的其他評論來說,+1 +1 – Cameron 2010-12-05 18:17:47
我無法相信有沒有答案的問題的所有答案都是最新的! – 2010-12-05 18:55:11