cách nhanh nhất để thực hiệnCách nhanh nhất để có được chữ số thập phân cao nhất của một số nguyên là gì?
template <typename T>
unsigned highest_decimal_digit(T x);
(trả về ví dụ 3 cho 356.431, 7 cho 71 và 9 trong 9) là gì?
Điều tốt nhất tôi có thể nghĩ đến là:
- constexpr-tính "kích thước trung" sức mạnh của 10 mà phù hợp với T.
- thực hiện tìm kiếm nhị phân (trong quyền hạn của 10, có thể sử dụng bảng tra cứu được cấu thành bằng constexpr) để tìm p, công suất cao nhất trong số 10 thấp hơn x.
- trả lại x chia cho p
... nhưng có thể có cách tiếp cận khác.
Ghi chú:
- tôi bày tỏ câu hỏi và cách tiếp cận của tôi trong C++ 14ish điều khoản, và một giải pháp trong mã sẽ được tốt đẹp, nhưng một giải pháp trừu tượng (hoặc thậm chí là một giải pháp trong lắp ráp x86_64) sẽ ổn thôi. Tôi muốn một cái gì đó mà sẽ làm việc cho tất cả các loại số nguyên (unsigned), mặc dù.
- Bạn có thể bỏ qua các loại tích phân đã ký.
- Tôi không chỉ định "nhanh" là gì, nhưng vui lòng nhận thức về phần cứng.
Có sử dụng chuỗi không được phép không? ..... – yobro97
@manlio thực sự, và thậm chí câu trả lời hay nhất có phù hợp với tôi: P – Vesper
@ yobro97: Không có cách nào mà bất kỳ công việc nào có chuỗi cho phép giải pháp nhanh. – einpoklum