Được rồi .. trước hết tôi cần thứ gì đó đã làm được những gì câu hỏi này đang hỏi, nhưng tôi cần nó NHANH CHÓNG! Thật không may là cách "tốt hơn" là gần 600 dòng mã !!! Xin lỗi vì cái tên của nó không liên quan gì đến những gì nó đang làm. Tên riêng là Integer64ToCharArray (giá trị int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
Hãy thử xóa mã đó mà không cản trở hiệu suất.
Đầu vào: Bất kỳ giá trị 64 bit nào có dấu từ phạm vi tối thiểu đến tối đa.
Thí dụ:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
Đầu ra:
Test: 9223372036854775807
Test: -9223372036854775808
Kiểm tra tốc độ gốc: ( Integer64ToCharArray (); )
Trường hợp tốt nhất giá trị 1 chữ số.
Số vòng lặp: 100.000.000, Thời gian tiêu tốn: 1.381 (Milli), Thời gian mỗi vòng 13 (Nano)
Trường hợp tồi tệ hơn Giá trị 20 chữ số.
Số vòng lặp: 100.000.000, Thời gian sử dụng: 22.656 (Milli), Thời gian mỗi vòng 226 (Nano
Kiểm tra tốc độ thiết kế mới: ( AddDynamentlyToBuffer (); )
Trường hợp tốt nhất giá trị 1 chữ số.
Số vòng lặp: 100.000.000, Thời gian tiêu tốn: 427 (Milli), Thời gian mỗi vòng 4 (Nano)
Trường hợp xấu nhất 32 bit - Giá trị 11 chữ số.
Số vòng lặp: 100.000.000, Thời gian tiêu tốn: 1.991 (Milli), Thời gian mỗi vòng 19 (Nano)
Âm 1 nghìn tỷ Trường hợp xấu nhất - Giá trị 14 chữ số.
Số vòng lặp: 100.000.000, Thời gian tiêu tốn: 5.681 (Milli), Thời gian mỗi vòng 56 (Nano)
Trường hợp xấu hơn 64 bit - Giá trị 20 chữ số.
Số vòng lặp: 100.000.000, Thời gian tiêu tốn: 13.148 (Milli), Thời gian mỗi vòng 131 (Nano)
Làm thế nào nó hoạt động!
Chúng tôi thực hiện kỹ thuật Chia và Chinh phục và khi chúng tôi đã đạt độ dài tối đa của chuỗi, chúng tôi chỉ cần đặt từng giá trị ký tự riêng lẻ. Như được hiển thị trong các bài kiểm tra tốc độ ở trên, độ dài lớn hơn sẽ bị phạt hiệu suất lớn, nhưng nó vẫn nhanh hơn nhiều so với phương pháp lặp ban đầu và không có mã nào thực sự thay đổi giữa hai phương pháp khác thì vòng lặp không còn được sử dụng nữa.
Trong cách sử dụng của tôi, do đó, tôi trả về giá trị thay thế và tôi không chỉnh sửa vùng đệm các mảng char thay vì tôi bắt đầu cập nhật dữ liệu đỉnh và hàm có một tham số bổ sung cho offset nên nó không được khởi tạo thành -1.