Vấn đề này yêu cầu chúng ta viết một hàm có tên là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 805 chấp nhận hai số nguyên không âm –
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 – được biểu diễn dưới dạng chuỗi. Hàm sẽ trả về tích của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807, cũng được biểu diễn dưới dạng một chuỗi
Ví dụ,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 80 sẽ trả về
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 81 [vì 2*3 = 6]
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 82 sẽ trả về
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 83 [như 123*45 = 5535]
Thách thức đối với vấn đề này là bạn không được phép chuyển đổi đầu vào thành số nguyên trực tiếp. Chẳng hạn, nếu đầu vào là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 84 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 85, bạn không được phép chuyển đổi chúng trực tiếp thành 123 và 45
Cách tiếp cận được đề xuất
Để giải quyết vấn đề Nhân chuỗi, chúng tôi sẽ chuyển đổi các chữ số riêng lẻ [trái ngược với toàn bộ đầu vào] trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 thành .
Ví dụ: nếu
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 88, chúng tôi sẽ chuyển đổi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 89 thành 1,
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 30 thành 2, v.v. Sau đó, chúng tôi sẽ nhân mỗi chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 với một chữ số khác trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 và thêm sản phẩm vào kết quả của chúng tôi
Cách tiếp cận có thể được chia thành các bước sau;
Bước 1
Khai báo một danh sách có tên là
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 với độ dài là
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 34. Khởi tạo tất cả các phần tử trong
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 thành 0.
Bước 2
Lặp qua
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807, bắt đầu từ phải sang trái. Chuyển đổi mỗi chữ số thành một số nguyên và nhân mỗi chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 [ký hiệu là
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 39] với mỗi chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 [ký hiệu là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 831].
Bước 2a
Đối với mỗi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 832 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 833, hãy thêm
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 834 vào
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 835
Bước 2b
Tính đến mọi khoản chuyển sang nếu sản phẩm ở Bước 2a lớn hơn 9
Bước 3
Sau khi lặp qua tất cả các chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807, hãy chuyển đổi
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở lại thành chuỗi
Bước 4
Trả về chuỗi kết quả
Thí dụ
Hãy sử dụng một ví dụ để minh họa cách phương pháp này hoạt động đối với vấn đề Nhân chuỗi
Giả sử
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 88 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 800Bước 1. Khai báo một danh sách được gọi là kết quả
Trước tiên, chúng tôi sẽ khai báo một danh sách có tên là
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33, với độ dài là 5 và giá trị ban đầu là 0 cho tất cả các phần tử của nó. Nói cách khác,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 802
Độ dài của
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 phải là 5 vì tích của số có 3 chữ số với số có 2 chữ số sẽ có nhiều nhất là 5 chữ số. Điều này là do số lớn nhất có 3 chữ số [999] nhân với số lớn nhất có 2 chữ số [99] cho ta 99,999 [có 5 chữ số]Bước 2. Lặp qua num1 và num2
Tiếp theo, chúng tôi sẽ lặp qua
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807, bắt đầu từ bên phải [i. e. chữ số cuối cùng, với chỉ số -1] sang trái
lặp lại 1
Ở lần lặp đầu tiên, chúng tôi sẽ chuyển đổi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 thành số nguyên và nhân chúng với nhau. Điều này mang lại cho chúng tôi 3 * 5 = 15. Chúng tôi sẽ thêm giá trị này vào
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 808 =
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 809
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở thành
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8051
Vì 15 lớn hơn 9, chúng tôi sẽ thêm phần chuyển sang
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8052 và cập nhật
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 809
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở thành
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8055
lặp lại 2
Tiếp theo, chúng tôi nhân các số nguyên của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8057. Điều này mang lại cho chúng tôi 3 * 4 = 12. Sẽ thêm giá trị này vào ________ 1058 = ________ 1052
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở thành
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8061
Vì 13 lớn hơn 9, chúng tôi sẽ thêm phần chuyển sang
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8062 và cập nhật
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8052
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở thành
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8065
Chúng tôi tiếp tục lặp qua các chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 cho đến khi hoàn thành tất cả các chữ sốBước 3. Chuyển đổi kết quả trở lại một chuỗi
Sau khi lặp qua tất cả các chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807,
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 lưu trữ các chữ số cho tích của 123 và 45. Nói cách khác,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8071
Chúng tôi sẽ chuyển đổi danh sách này thành chuỗi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 83Bước 4. Trả về chuỗi kết quả
Cuối cùng, chúng tôi trả về chuỗi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 83
Giải thích cho Bước 2a
Trong tất cả các bước trên, Bước 2a là khó hiểu nhất
Để hiểu cách thức hoạt động của bước này, hãy xem các bước lặp lại cho
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 88 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 800, như thể hiện trong sơ đồ bên dưới
ví dụ 1
Chúng tôi sẽ sử dụng lần lặp 4 để minh họa. Ở đây, ta nhân chữ số hàng chục [10] trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 với chữ số hàng chục [10] trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807. Vì 10 × 10 = 100, kết quả của phép nhân phải ở hàng trăm
Đặc biệt,
______1078
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8079
Sau khi chúng tôi chuyển đổi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8060 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8057 thành số nguyên và nhân chúng, chúng tôi nhận được 2 * 4 = 8
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 30 trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 là viết tắt của 20 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8064 trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 là viết tắt của 40.
Vì 20*40 = 800, tích 8 mà chúng ta nhận được bằng cách nhân các số nguyên của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8060 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8057 thực ra là 800. Do đó, ta thêm 8 vào chữ số hàng trăm [i. e. ô màu xanh] cho
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33
ví dụ 2
Tiếp theo, hãy xem xét một ví dụ khác. Chúng tôi sẽ sử dụng lần lặp 6 để minh họa lần này
Ở đây, ta nhân chữ số hàng trăm [100] của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 với chữ số hàng chục [10] của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807. Vì 100×10 = 1000 nên kết quả của phép nhân phải được cộng với chữ số hàng nghìn trong
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33. Do đó, ta thêm 5 vào chữ số hàng nghìn [ô màu xanh] trong
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33
Logic tương tự áp dụng cho tất cả các lần lặp lại khác
Lấy chỉ số cho kết quảPhần khó khăn trong giải pháp được đề xuất của chúng tôi là tìm ra chỉ số chính xác cho
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 để thêm tích của
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 39 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 831 vào
Điều này có thể được thực hiện thông qua quan sát
Nếu bạn nghiên cứu tất cả các phép lặp ở trên, có lẽ bạn sẽ nhận thấy rằng nói chung, khi chúng ta nhân
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 39 với
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 831, chỉ số chính xác của
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 được cho bởi công thức
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8079
Chẳng hạn, đối với lần lặp 4,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 800 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 801. Chúng tôi thêm tích của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8060 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8057 vào chỉ mục -3 trong
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33
-3 có thể được tìm thấy bằng cách sử dụng [-2] + [-2] + 1
Đối với lần lặp 6, chúng tôi thêm
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 805 vào
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806
-4 có thể được tìm thấy bằng cách sử dụng [-3] + [-2] + 1
Điều tương tự áp dụng cho tất cả các lần lặp lại khác. Bạn có thể tự mình thử để kiểm chứng
Dựa trên lời giải thích và mô tả ở trên, hãy thử tự mình thực hiện thử thách này
Cách tiếp cận được mô tả ở trên để giải bài toán Nhân chuỗi được tóm tắt trong hình minh họa bên dưới
đồ họa minh họa
giải pháp đề xuất
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 84
Trong giải pháp được đề xuất ở trên, trước tiên chúng tôi khai báo một từ điển có tên là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807. Từ điển này ánh xạ một chuỗi một chữ số thành một số nguyên. Chẳng hạn,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 808 cho chúng ta số nguyên 0,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 809 cho chúng ta 1, v.v. Chúng tôi sẽ sử dụng từ điển này để chuyển đổi các chữ số trong chuỗi đầu vào của chúng tôi thành số nguyên sau
Tiếp theo, chúng ta khai báo một danh sách có tên là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 810. Danh sách này bao gồm các phần tử chuỗi tương ứng với các chỉ mục của chúng. Chẳng hạn,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 811 cung cấp cho chúng tôi chuỗi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 812,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 813 cung cấp cho chúng tôi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 89, v.v. Chúng tôi sẽ sử dụng danh sách này để chuyển đổi số nguyên một chữ số trở lại chuỗiBước 1
Ở dòng 7, chúng ta khai báo và khởi tạo
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33
Tiếp theo, chúng tôi khai báo một biến có tên là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816 sẽ được sử dụng để lưu trữ kết quả phép nhân của chúng tôi dưới dạng một chuỗi
Từ dòng 11 đến dòng 19, chúng ta lặp qua
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 từ phải sang trái bằng hai vòng lặp
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 819Bước 2a
Bên trong vòng lặp
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 819 bên trong, chúng tôi sử dụng từ điển
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 để chuyển đổi
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 39 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 831 thành số nguyên. Tiếp theo, chúng tôi nhân hai số nguyên và thêm sản phẩm vào
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 835 trên dòng 15Bước 2b
Trên các dòng 18 và 19, chúng tôi thực hiện hai phép toán để tính toán bất kỳ khoản chuyển
Giả sử
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 825,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 800 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 827, chúng ta cần chuyển sang cho
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8052
Trên dòng 18,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở thành
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 830
Trên dòng 19,
________số 8Kết quả là,
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 được cập nhật từ
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 832 thành
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 833. Điều này cho thấy một ví dụ về cách chuyển sang được thực hiện
Mặt khác, giả sử
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 834, chúng tôi không cần thực hiện bất kỳ chuyển đổi nào. Dòng 18 và 19 sẽ không có hiệu lực đối với
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 nếu tất cả các phần tử trong
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 đều nhỏ hơn 10
Giả sử,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 837 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 827,
Trên đường 18
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 83
Trên dòng 19
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 80
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 vẫn là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 840 sau dòng 18 và 19. Đó là, không chuyển nhượng được thực hiệnBước 3
Sau khi lặp qua tất cả các chữ số trong
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807 và hoàn thành bước 2a và 2b,
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 lưu các chữ số của tích của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 806 và
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 807
Từ dòng 22 đến 25, chúng tôi chuyển đổi
result[i+j+1] %= 10 becomes result[-2] = result[-2] % 10 = 13 % 10 = 33 trở lại chuỗi. Chúng tôi làm điều đó bằng cách sử dụng danh sách
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 810 để chuyển đổi từng chữ số thành một chuỗi và nối kết quả vào một biến có tên là
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816 [trên dòng 23]
Tiếp theo, chúng tôi sử dụng hàm Python tích hợp sẵn
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 849 để xóa mọi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 812 hàng đầu khỏi
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816. Chẳng hạn, nếu
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 8071,
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 853
Dòng 25 loại bỏ
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 812 ở đầu và gán kết quả
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 83 trở lại cho
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816Bước 4
Trên dòng 28, chúng tôi trả về giá trị của
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816
Tuy nhiên, trước khi chúng tôi làm điều đó, trước tiên chúng tôi kiểm tra xem
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816 có phải là một chuỗi rỗng không. Nếu đúng như vậy, chúng tôi sẽ trả lại
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 812. Khác, chúng tôi trở lại
result[i+j] += result[i+j+1] // 10 becomes result[-3] = result[-3] + [result[-2] // 10] = result[-3] + [13//10] = result[-3] + 1 = 816