Nguồn đề bài: http://www.spoj.com/PTIT/problems/PTIT013K/
1. Đề bài PTIT013K spoj
Số nguyên hệ cơ số ACM là những số nguyên thông thường sử dụng các ký hiệu từ 0,1,…,9 làm ký hiệu hệ đếm (ví dụ số 719ACM). Nguyên tắc chung để đổi một số A = (aN, aN-1, …,a1) ở hệ cơ số ACM sang số ở hệ cơ số 10 được thực hiện như sau:
K10 = sum ai * i!
trong đó ai chữ số tại vị trí thứ i của hệ cơ số ACM.
Ví dụ: A = 719ACM = 9.(1!) + 1*(2!) + 7.(3!) = 5310
Input
Dữ liệu vào gồm nhiều bộ dữ liệu tương ứng với nhiều test. Dòng đầu tiên chứa một số nguyên không lớn hơn 100 là số lượng các bộ dữ liệu.
Mỗi bộ dữ liệu viết trên một dòng một số nhỏ hơn 2^32 là các số ở hệ cơ số ACM.
Output
Với mỗi bộ dữ liệu, ghi ra trên một dòng một số trong hệ cơ số 10 được chuyển đổi tương ứng với dữ liệu vào.
Example
Input:
6
719
1
15
110
102
8
Output:
53
1
7
8
8
8
2. Hướng dẫn PTIT013K spoj PTIT
– Thực hiện duyệt trâu bình thường ĐPT có thể lên đến O(100*10*10)
– để tiện, ở code mẫu pascal mình tính sẳn kết quả giai thừa, giảm ĐPT xuống còn O(100*10)
Tuy nhiên ở bài này, làm ĐPT O(100*10*10) vẫn AC 😀
3. Code tham khảo PTIT013K spoj PTIT
const fi=''; A:array[0..10] of longint=(1,1,2,6,24,120,720,5040,40320,362880,3628800); type data=longint; var f:text; s:string; res:data; i:data; begin assign(f,fi); reset(f); readln(f,s); while not eof(f) do begin readln(f,s); res:=0; for i:=1 to length(s) do res:=res+A[length(s)-i+1]*(ord(s[i])-48); writeln(res); end; close(f); end.