Nguồn đề bài: http://www.spoj.com/PTIT/problems/PTIT013K/
Nội dung bài viết
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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. |
Bài viết liên quan
- PTIT016E spoj PTIT – ACM PTIT 2016 E – Kỳ thi ACM/ICPC
- P156SUME spoj PTIT – ROUND 6E – Ước chung của chuỗi
- P156SUMH spoj PTIT – ROUND 6H – Kim cương
- P147PROB spoj PTIT – Pha nước cam
- P141PROB spoj PTIT – Tuần lễ công dân
- BCTHIDAU spoj PTIT – Thi đấu
- BCJABUKE spoj – Nhặt táo
- BCCOM spoj PTIT – Số nén tối giản
- BCCAR spoj PTIT – Đỗ xe tối ưu
- P153PROI PTIT spoj – Mã hóa xâu