(Python) Phép chia số nguyên và phần dư


Phép chia số nguyên và số dư

Trong học phần "Biểu thức số học" chúng ta đã nói về phép chia số nguyên.
Hãy nhớ lại chúng một lần nữa:
// - phép chia số nguyên, khi chúng ta loại bỏ phần phân số do phép chia
% - phép tính phần còn lại của một phép chia.
Phép toán còn lại cho số âm trong  Python được thực thi hơi khác so với các ngôn ngữ lập trình khác như C++ hoặc Pascal
Trong Python, thao tác tính phần dư được thực hiện theo các quy tắc toán học, nghĩa là, như người ta thường tin trong Lý thuyết số, phần dư là một số không âm   (bài viết rất hữu ích 81_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC" target=" _blank">tại đây). Dấu của số dư trùng với dấu của số chia.

Ví dụ 
c = 10 // 3 # Trả lời: c = 3 d = 10% 3 # Trả lời: d = 1 e = -7 // 4 # Trả lời: e = -2 f = -7% 4 # Trả lời: f = 1 Các giá trị của biến ef hóa ra như thế này vì  -7 = (-2*4)+1
Cần ghi nhớ!
Trong Python, thao tác tính phần dư cho số âm được thực hiện theo quy tắc toán học, đó là \(-7\ \%\ 4 = 1 \)< br /> Trong ngôn ngữ lập trình Python dấu dư giống như dấu chia. 

Các phép toán số nguyên rất quan trọng trong lập trình. Chúng cần được hiểu và sử dụng đúng cách. Và điều này cần thực hành!

Phép chia số nguyên và số dư

Nhu cầu áp dụng thao tác tính phần dư của phép chia có thể thấy được khi làm việc với các chữ số của một số. 
 
Nhiệm vụ
Một số có ba chữ số được cho. Hiển thị tất cả các chữ số của số này, bắt đầu bằng hàng đơn vị và nhận một số mới được tạo bằng cách hoán vị hàng đơn vị và hàng trăm.

Chúng ta luôn nghĩ về một số như một tổng thể, nhưng đừng quên rằng các số được tạo thành từ các chữ số. Làm cách nào để bạn chọn tất cả các chữ số của một số?
Trên thực tế, mọi thứ đều được giải quyết khá đơn giản, nếu bạn nhớ toán học. Và toán học cho chúng ta biết rằng bất kỳ số nào cũng có thể được phân tích thành tổng của các số hạng bằng chữ số.

Ví dụ: 365 = 3*100 + 6*10 + 5*1 .
Chúng tôi thấy rằng mỗi chữ số là một số nhân của thuật ngữ bit tương ứng. 

Chúng tôi sẽ trình bày cách chuyển từng chữ số của một số thành một biến riêng bằng cách sử dụng ví dụ về chia một cột cho số 10. Chúng tôi lấy số 10, bởi vì chúng tôi có một hệ thống số thập phân và theo đó, các thuật ngữ bit 1, 10, 100, v.v.

  

Phân tích hình, bạn có thể thấy rằng  e = n% 10 # phép toán n % 10 - tính chữ số cuối cùng của số n # (nghĩa là chữ số hàng đơn vị) 365 % 10 = 5 d = n // 10% 10 # thao tác n // 10 - giảm số đi 10 lần, # tức là loại bỏ chữ số cuối cùng của số (365 // 10 = 36), # bây giờ chúng ta có thể tính chữ số hàng chục, # áp dụng thao tác quen thuộc cho kết quả - # tính phần còn lại sau khi chia cho số 10, 36 % 10 = 6 s = n // 100 # để có chữ số hàng trăm, chỉ cần bỏ đi hai chữ số ở bên phải của số đó, # tức là hai lần chia cho 10 # (n // 10 // 10 hoặc bằng n // 100) 365 // 100 = 3
Có các chữ số của số được lưu trữ trong các biến, chúng ta có thể tạo bất kỳ số nào khác từ chúng bằng cách nhân chữ số mong muốn với các thừa số bit thích hợp (với 1, 10, 100, v.v.): 
Ví dụ: dòng bên dưới sẽ nhận một số mới từ số ban đầu n, với hàng trăm và hàng đơn vị được sắp xếp lại:
1) chữ số hàng đơn vị (được lưu trữ trong  e)  nhân với 100
2) chữ số hàng chục (được lưu trữ trong biến d)  nhân với 10
3) chúng ta có thể chỉ cần nhân chữ số hàng trăm với 1 hoặc chỉ cần lấy giá trị được lưu trữ trong biến s.
Sau đó, các giá trị từ các điểm 1, 2 và 3 chỉ cần được thêm vào và chúng tôi nhận được một số mới: n1 = e*100 + d*10 + s;
Chương trình hoàn chỉnh sẽ trông như thế này: n = int(đầu vào()) e = n% 10 d = n // 10% 10 s = n // 100 in(e, d, s, e*100 + d*10 + s)