PTIT013K spoj PTIT – SỐ NGUYÊN HỆ CƠ SỐ ACM

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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *