Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - Сумма hex чисел
- // Создание словарей для преобразования шестнадцатеричных значений в десятичные и наоборот
- let hexValueOfDec: [Character: Int] = [
- "0": 0, "1": 1, "2": 2, "3": 3, "4": 4,
- "5": 5, "6": 6, "7": 7, "8": 8, "9": 9,
- "A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15
- ]
- let decValueOfHex: [Int: Character] = [
- 0: "0", 1: "1", 2: "2", 3: "3", 4: "4",
- 5: "5", 6: "6", 7: "7", 8: "8", 9: "9",
- 10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F"
- ]
- // Функция для сложения двух шестнадцатеричных чисел
- func addHex(_ a: String, _ b: String) -> String {
- // Проверка, если длина первой строки
- // больше или равна длине второй строки
- var (a, b) = (a, b)
- if a.count < b.count {
- swap(&a, &b)
- }
- // Хранение длины обеих строк
- let (l1, l2) = (a.count, b.count)
- var ans = ""
- // Инициализация переноса как нуля
- var carry = 0
- var (i, j) = (l1 - 1, l2 - 1)
- // Перебор до конца второй строки
- // для полного прохода
- while j >= 0 {
- // Десятичное значение элемента в a[i]
- // Десятичное значение элемента в b[i]
- let sum = hexValueOfDec[a[a.index(a.startIndex, offsetBy: i)]]! +
- hexValueOfDec[b[b.index(b.startIndex, offsetBy: j)]] + carry
- // Шестнадцатеричное значение суммы % 16
- // для получения бита сложения
- let additionBit = decValueOfHex[sum % 16]!
- // Добавить additionBit к ответу
- ans.append(additionBit)
- // Обновление переноса
- carry = sum / 16
- i -= 1
- j -= 1
- }
- // Перебор оставшихся элементов
- // строки a
- while i >= 0 {
- // Десятичное значение элемента
- // в a[i]
- let sum = hexValueOfDec[a[a.index(a.startIndex, offsetBy: i)]]! + carry
- // Шестнадцатеричное значение суммы % 16
- // для получения бита сложения
- let additionBit = decValueOfHex[sum % 16]!
- // Добавить additionBit к ответу
- ans.append(additionBit)
- // Обновление переноса
- carry = sum / 16
- i -= 1
- }
- // Проверка, остается ли еще перенос
- if carry != 0 {
- ans.append(decValueOfHex[carry]!)
- }
- // Реверс окончательной строки
- // для желаемого вывода
- return String(ans.reversed())
- }
- // Код запуска
- let str1 = "1B"
- let str2 = "AD"
- // Вызов функции
- print(addHex(str1, str2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement