Добре .. по-перше, мені було потрібно щось, що робило те, що задається цим питанням, але мені це було потрібно Швидше! На жаль, "кращий" спосіб - це майже 600 рядків коду !!! Вибачте його, яке не має нічого спільного з тим, що він робить. Власне ім’я було Integer64ToCharArray (значення int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
Спробуйте спробувати очистити цей код, не заважаючи виконувати його.
Введення: Будь-яке підписане 64-бітове значення від мінімуму до максимального діапазону.
Приклад:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
Вихід:
Test: 9223372036854775807
Test: -9223372036854775808
Оригінальні тести швидкості: ( Integer64ToCharArray (); )
Найкраще значення з 1 цифрою.
Петлі: 100 000 000, Час витрати: 1,381 (Міллі), Час за цикл 13 (Нано)
Гірший випадок значення 20 цифр.
Петлі: 100 000 000, Час витрачання: 22 656 (Міллі), Час за цикл 226 (Нано
Нові тести на швидкість дизайну: ( AddDynamicallyToBuffer (); )
Найкраще значення з 1 цифрою.
Петлі: 100 000 000, Час витрати: 427 (Міллі), Час за цикл 4 (Нано)
32 біт найгірший випадок - значення 11 знаків.
Петлі: 100 000 000, Час витрати: 1,991 (Міллі), Час за цикл 19 (Нано)
Від’ємний найгірший випадок на 1 трлн. - значення у 14 цифрах.
Петлі: 100 000 000, Час витрачання: 5,681 (Міллі), Час за цикл 56 (Нано)
64 біт гірший випадок - 20 цифр.
Петлі: 100 000 000, Час витрати: 13,148 (Міллі), Час за цикл 131 (Нано)
Як це працює!
Ми виконуємо техніку «Розділити і перемогти», і як тільки ми зараз встановимо максимальну довжину рядка, просто встановимо кожне значення символу окремо. Як показано у вищевказаних тестах на швидкість, більші довжини отримують великі штрафні показники, але це все ще набагато швидше, ніж оригінальний метод циклу, і жоден код насправді не змінився між двома методами, а потім циклічне використання вже не використовується.
Звідси в імені я повертаю зміщення замість цього, і я не редагую буфер масивів знаків, а починаю оновлення даних вершин, і функція має додатковий параметр для зміщення, тому не ініціалізується до -1.