Lý lịch
Nhiệm vụ rất đơn giản nhưng mọi lập trình viên đã thực hiện nó ít nhất một lần. Stackoverflow có rất nhiều mẫu, nhưng chúng có đủ ngắn để giành chiến thắng không?
Vấn đề
Bạn là một lập trình viên cục cằn, người được giao nhiệm vụ triển khai đầu vào kích thước tệp cho người dùng. Vì người dùng không sử dụng byte nên mọi người sẽ chỉ nhập "1M", "1K", "3G", "3.14M" - nhưng bạn cần byte! Vì vậy, bạn viết một chương trình để thực hiện chuyển đổi.
Sau đó, người quản lý của bạn cung cấp cho bạn hàng tá báo cáo người dùng với các khiếu nại về số lượng lớn kỳ lạ trong kích thước tệp. Có vẻ như bạn cũng sẽ cần mã chuyển đổi ngược lại.
Bạn cần làm gì?
Đây là mẹo: bạn nên thực hiện chuyển đổi hai chiều trong một đoạn mã. Hai chức năng riêng biệt được sử dụng khi cần thiết? Không, điều đó quá đơn giản - hãy tạo một, ngắn một!
Đối với mục đích của thử thách này, "kilobyte" có nghĩa là 1024 byte, "megabyte" có nghĩa là 1024 * 1024 = 1048576 byte và "gigabyussy" có nghĩa là 1024 * 1024 * 1024 = 1073741824 byte.
Dữ liệu kiểm tra
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
Quy tắc
- Giá trị thử nghiệm sẽ không vượt quá 2 * 1024 * 1024 * 1024 hoặc 2G
- Các hậu tố sau đây được người dùng sử dụng: K cho kilobyte, M cho megabyte, G cho gigabyte
- Mã không bắt buộc phải làm việc với số âm
- Không sử dụng bất kỳ thư viện bên ngoài nào (ví dụ:
BCMathtrong PHP) bên cạnh các thư viện được đóng gói (ví dụmath.h) - Các sơ hở tiêu chuẩn không được phép
- Mã không nên sản xuất bất cứ thứ gì trên stderr
- Chương trình của bạn có thể lấy đầu vào và tạo đầu ra bằng các phương thức tiêu chuẩn