Tìm số làm tròn lên ở hệ nhị phân với base là (-2)
https://en.wikipedia.org/wiki/Negative_base
Đề bài là tìm mảng miêu tả hệ nhị phân âm của một số bất kỳ sau khi chia 2 và làm tròn lên.
import Foundation
extension Int {
//ví dụ: 4 -> [0, 0, 1], -23 -> [1, 0, 0, 1, 1, 1]
var negativeBaseTwoRepresentation: [Int] {
if (self == 0) { return [0] }
var result: [Int] = []
var temp = self
while (temp != 0)
{
var remainder = temp % (-2)
temp /= (-2)
if (remainder < 0) {
remainder += (2)
temp += 1
}
result.append(remainder)
}
return result
}
}
extension Array where Element == Int {
//Ví dụ: [0, 0, 1] -> 4, [1, 0, 0, 1, 1, 1] -> -23
var toIntVal: Int {
var result = 0
for i in 0..<self.count {
result = result + self[i] * Int(pow(Double(-2), Double(i)))
}
return result
}
}
func solution(_ A: inout [Int]) -> [Int] {
let input = A.toIntVal
print(input)
let result = (input >> 1 + input & 1)
print(result)
return result.negativeBaseTwoRepresentation
}
//Test
let val = -23
print(val.negativeBaseTwoRepresentation)
var rep = val.negativeBaseTwoRepresentation
let result = solution(&rep)
print(result)
print(result.toIntVal)
Kết quả:
//đầu vào
[1, 0, 0, 1, 1, 1]
-23
//chia 2 làm tròn lên
-11
[1, 0, 1, 0, 1, 1]
//kiểm tra lại
-11
Happy cheating!