C7-13 · Cộng hai số lớn
Xem dạng PDFNguồn: Bài C7-13, mục 7.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.
Đề
Nhiều ngôn ngữ lập trình chỉ lưu được số nguyên tới khoảng 19 chữ số; muốn cộng số lớn hơn phải tự cộng như cách học ở tiểu học. Cho hai số nguyên không âm ~a~, ~b~ viết dưới dạng chuỗi chữ số. In tổng ~a + b~.
Yêu cầu cách làm: cộng từng cặp chữ số từ phải sang trái, kèm số nhớ; không đổi cả chuỗi sang int.
Dữ liệu vào
- Dòng 1: số ~a~.
- Dòng 2: số ~b~.
Kết quả
Một dòng: tổng ~a + b~, không có chữ số 0 thừa ở đầu (tổng bằng 0 thì in 0).
Ràng buộc
- ~a~, ~b~ là số nguyên không âm, mỗi số có từ ~1~ đến ~200~ chữ số.
- Không có chữ số 0 thừa ở đầu (số 0 viết là
0). Hai số có thể dài khác nhau.
Lưu ý về chấm
Hệ thống chỉ kiểm kết quả in ra. Ràng buộc "không đổi cả chuỗi sang int" là phần giảng viên kiểm khi xem mã nguồn (trong Python, int(a) + int(b) vẫn ra đúng vì số nguyên Python không giới hạn chữ số — nhưng đó không phải bài tập này).
Gợi ý
Đệm "0" bên trái số ngắn hơn cho hai số dài bằng nhau, rồi duyệt chỉ số i từ n - 1 về 0: tam = int(a[i]) + int(b[i]) + nho, ghép str(tam % 10) vào trước kết quả, nho = tam // 10. Hết vòng lặp còn số nhớ thì ghép thêm.
Ví dụ 1
Dữ liệu vào:
98765432109876543210
1234567890123456789
Kết quả:
99999999999999999999
Ví dụ 2
Dữ liệu vào:
999
1
Kết quả:
1000
Giải thích ví dụ
- Ví dụ 1: số thứ nhất có 20 chữ số, số thứ hai 19 chữ số; mọi cột cộng lại đều được 9, không cột nào có nhớ.
- Ví dụ 2: cột đơn vị
9 + 1 = 10, viết0nhớ1; hai cột tiếp theo9 + 0 + 1 = 10, cũng viết0nhớ1. Hết chữ số mà còn nhớ1nên tổng có thêm chữ số1ở đầu:1000.
Nguồn trong sách: bài tập C7-13 (mục 7.10) · Mức: (****)