Soyo

Tìm số làm tròn lên ở hệ nhị phân với base là (-2)

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!

Comments