C7-13 · Cộng hai số lớn

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Nguồ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ết 0 nhớ 1; hai cột tiếp theo 9 + 0 + 1 = 10, cũng viết 0 nhớ 1. Hết chữ số mà còn nhớ 1 nê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: (****)


Đang tải...