Viết một chương trình trực quan hóa sự phân chia dài với nghệ thuật ASCII. Đầu vào bao gồm hai số nguyên, tử số và mẫu số, sử dụng định dạng đầu vào mà bạn chọn.
Ví dụ:
1234 56:
22
----
56|1234
112
---
114
112
---
2
1002012 12:
83501
-------
12|1002012
96
---
42
36
--
60
60
--
12
12
--
0 35
0
-
35|0
Quy tắc:
- Sử dụng toán tử phân chia của ngôn ngữ lập trình được cho phép.
- Sử dụng hỗ trợ số nguyên lớn cũng được cho phép.
- Cho thống nhất:
- Nếu thương số bằng 0, hãy in một số 0 ở cuối bảng lặn.
- Nếu phần còn lại bằng không, không in nó.
- Không in số không hàng đầu trên bất kỳ số nào.
- Các dòng mới vượt quá ở cuối và dấu cách ở bên phải được cho phép.
- Giải pháp với ít nhân vật nhất sẽ thắng.
Hạn mức:
- 0 <= tử số <= 10 72 - 1
- 1 <= mẫu số <= 9999999
Điều này ngụ ý rằng đầu ra sẽ không bao giờ rộng hơn 80 cột.
Bộ kiểm tra và thực hiện mẫu:
Bạn có thể sử dụng long-Division.c ( ý chính ) để kiểm tra chương trình của bạn. Nó thực sự là một tập lệnh bash với chương trình C bên trong. Tinh chỉnh nó để gọi chương trình của bạn trong bộ thử nghiệm. Nhìn vào mã C ở phía dưới để xem việc thực hiện tham chiếu. Xin vui lòng cho tôi biết nếu có bất kỳ vấn đề với chương trình mẫu hoặc bộ thử nghiệm.
$ ./long-division.c 10 7
1
--
7|10
7
--
3
$ ./long-division.c
PASS 1234 ÷ 56
PASS 1002012 ÷ 12
PASS 1 ÷ 1
--- snip ---
Score: 35 / 35
All tests passed!
Chỉnh sửa: Theo yêu cầu, tôi đặt thử nghiệm bộ đầu vào và đầu ra dự kiến vào các tập tin văn bản ( ý chính ). Sử dụng mẫu (bash):
cat input | while read nd; do
./program $nd |
sed 's/\s*$//' | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
done > output
diff -u expected output
Các lệnh sed kỳ lạ lọc ra các dòng mới và dấu cách từ đầu ra chương trình.