Hướng dẫn recursive algorithm for converting decimal to any base python - thuật toán đệ quy để chuyển đổi số thập phân thành bất kỳ python cơ sở nào
Tôi khuyên bạn nên cấu trúc mã của bạn một cách chính xác hơn. Bạn có thể phân chia nhiệm vụ được chỉ định một cách mơ hồ mà bạn đề cập theo các nhiệm vụ phụ khác nhau, ví dụ: Show
Trong số các nhiệm vụ này, chỉ có nhiệm vụ thứ hai có thể được coi là phù hợp với việc thực hiện "đệ quy" nếu một người khăng khăng (mặc dù việc thực hiện lặp đi lặp lại trên thực tế là tự nhiên hơn nhiều!) - cho rằng đây là bài tập về nhà, tôi đoán bạn sẽ phải Làm điều đó một cách đệ quy vì đó là một phần của nhiệm vụ được giao, À!-). Nhưng, để tham khảo, một cách rõ ràng để lặp lại sẽ là:
Giả sử một người muốn chuỗi chữ số theo thứ tự "endian lớn" mà chúng ta đã sử dụng từ cách ký hiệu thập phân vị trí đi vào văn hóa phương Tây (đó là thứ tự nhỏ tính hơn tự nhiên hơn trong bản gốc tiếng Ả Rập ... nhưng tiếng Ả Rập được viết Phải sang trái, phiên âm theo nghĩa đen của trật tự đó bằng các ngôn ngữ châu Âu, được viết từ trái sang phải, đã trở thành Big-endian!-). Dù sao, bạn có thể nhận đệ quy đơn giản, tuyến tính như một cách để "đảo ngược" mọi thứ ngầm (bạn có thể nói đệ quy như vậy "ẩn" một ngăn xếp cuối cùng, đầu tiên, rõ ràng là một cách để đảo ngược một chuỗi ;-), mà tôi đoán là nơi thông số kỹ thuật đệ quy trong bài tập về nhà có thể đến từ ;-). Bài đăng này liên quan đến các phương thức để liên kết thập phân với bất kỳ số hệ thống cơ sở nào vào bất kỳ cơ sở nào tùy thuộc vào đầu vào của người dùng trong Python. Điều kiện tiên quyết: Những điều cơ bản của các cấu trúc vòng Python Thập phân cho bất kỳ cơ sở nào - phương phápThuật toán cơ bản cho chuyển đổi này là chia liên tục (phân chia số nguyên) Số thập phân đã cho cho giá trị cơ sở đích cho đến khi số thập phân trở thành 0. Tuy nhiên, phần còn lại trong mỗi trường hợp tạo thành các chữ số của số trong hệ thống cơ sở mới, tuy nhiên, trong thứ tự ngược lại. Một giới hạn trênThuật toán nói chung sẽ hoạt động cho bất kỳ cơ sở nào, nhưng chúng tôi cần các chữ số/ký tự để biểu thị nhiều số của một hệ thống cơ sở. Để đơn giản, chúng tôi giới hạn bản thân ở cơ sở 36 tức là 10 số + 26 bảng chữ cái. (Chúng tôi có thể phân biệt trường hợp thấp hơn và trên, nhưng chúng tôi dự định tập trung vào thuật toán ở đây!). Sẽ rõ ràng sau khi thực hiện rằng phương pháp phải hoạt động cho bất kỳ cơ sở nào. Số thập phân cho bất kỳ cơ sở nào - thực hiện PythonXem xét chương trình sau, def dec_to_base(num,base): #Maximum base - 36 base_num = "" while num>0: dig = int(num%base) if dig<10: base_num += str(dig) else: base_num += chr(ord('A')+dig-10) #Using uppercase letters num //= base base_num = base_num[::-1] #To reverse the string return base_num Lưu ý điều kiện IF được sử dụng để kiểm tra xem các chữ số 0-9 có đủ để chứa tất cả các chữ số trong cơ sở không. Mặt khác, chúng tôi đang gán một bảng chữ cái phù hợp cho chữ số.
Dòng cuối cùng được sử dụng như một hoạt động đảo ngược chuỗi. Về cơ bản, nó tạo ra một lát chuỗi từ đầu đến cuối (được biểu thị bằng hai đối số trống đầu tiên) bằng cách đi từ cuối để bắt đầu (được biểu thị bằng -1). Đây là một đầu ra mẫu, chuyển đổi thành cơ sở 28 Do đó, chúng tôi có thể chuyển đổi một số thập phân thành bất kỳ cơ sở nào cần thiết. Một số phương pháp chuyển đổi cơ sở tích hợpPython cung cấp một số phương pháp chuyển đổi cơ sở tích hợp cho các số nhị phân, bát phân và thập lục phân. Việc sử dụng rất đơn giản:
Bất kỳ cơ sở nào để thập phânPython cũng cung cấp chuyển đổi dễ dàng từ bất kỳ cơ sở nào sang số thập phân. Điều này được thực hiện bằng cách đơn giản là chuyển một chuỗi có biểu diễn cơ sở khác của số thập phân và giá trị cơ sở là đối số thứ hai. Nó trả lại số thập phân! print int("1123",5) #Prints string given in base-5 in decimal Đầu ra là: 163 Thuật toán và thực hiện cho bất kỳ cơ sở nàoLogic rất đơn giản. Chúng ta chỉ cần nhân mỗi chữ số tại một vị trí với giá trị cơ sở được nâng lên giá trị vị trí (bắt đầu từ 0 từ bên phải). Đó là cách một hệ thống cơ sở được xác định, trong thực tế. Chẳng hạn, nếu 1011 là số nhị phân, tương đương thập phân là
Chương trình sau đây minh họa tương tự, def base_to_dec(num_str,base): num_str = num_str[::-1] num = 0 for k in range(len(num_str)): dig = num_str[k] if dig.isdigit(): dig = int(dig) else: #Assuming its either number or alphabet only dig = ord(dig.upper())-ord('A')+10 num += dig*(base**k) return num Dưới đây là đầu ra mẫu cho cùng một giá trị được chuyển đổi trong đầu ra trước Hãy thoải mái để lại bất kỳ loại phản hồi, gợi ý, nghi ngờ bên dưới. |