Các hệ thống Số thừa , còn gọi là factoradic, là một hệ thống radix số hỗn hợp. Các giai thừa xác định giá trị vị trí của một số.
Trong hệ thống này, chữ số bên phải nhất có thể là 0 hoặc 1, chữ số ngoài cùng bên phải thứ hai có thể là 0, 1 hoặc 2, v.v. Điều này có nghĩa là một n
số nhân tố số có thể có giá trị tối đa là (n + 1)!
.
Ví dụ: để chuyển đổi số nhân 24201
thành số thập phân, bạn sẽ làm điều này:
2 * 5! = 240
4 * 4! = 96
2 * 3! = 12
0 * 2! = 0
1 * 1! = 1
240 + 96 + 12 + 0 + 1 = 349
Do đó số nhân tố 24201
là 349
cơ sở 10
.
Để chuyển đổi một số thập phân (với 349
ví dụ) thành một số nhân tố, bạn sẽ làm điều này:
Lấy giai thừa lớn nhất ít hơn số. Trong trường hợp này, nó là 120
, hoặc 5!
.
349 / 5! = 2 r 109
109 / 4! = 4 r 13
13 / 3! = 2 r 1
1 / 2! = 0 r 1
1 / 1! = 1 r 0
Do đó 349
cơ sở 10
là số nhân tố 24201
.
Thách thức của bạn là tạo ra chương trình hoặc chức năng ngắn nhất để chuyển đổi một số đầu vào thành cơ sở khác.
Đầu vào sẽ là một chuỗi đại diện của một số nguyên không âm. Một số nhân tố sẽ được đi trước bởi một !
(ví dụ !24201
), trong khi một số thập phân sẽ không được đi trước bởi bất cứ điều gì. Bạn có thể giả định rằng đầu vào tối đa sẽ là 10! - 1
- 3628799
ở dạng thập phân và 987654321
theo hệ số. Điều này có nghĩa là các chữ cái sẽ không xuất hiện trong một đầu vào / đầu ra nhân tố.
Chương trình không cần phải trả trước một !
đầu ra nhân tố và có thể xuất ra một chuỗi hoặc một số nguyên. Các đầu vào có thể ở bất kỳ định dạng hợp lý.
Các trường hợp thử nghiệm:
Input: 1234
Output: 141120
Input: 746
Output: 101010
Input: !54321
Output: 719
Input: !30311
Output: 381
⍴⍵∩'!'
với'!'∊⍵
để lưu một ký tự.