Category Archives: Chỉ dẫn lập trình

Implement thuật toán cộng trừ nhân chia số nguyên lớn

PHP hay JS cho nhanh nhỉ?
Thôi chả code đâu, trình bày lại ý tưởng thôi. Cũng đơn giản mà, chỉ có cái chia hai số nguyên lớn là loằng ngoằng một chút thôi à.

Cộng:
aaaaaaaaaaaaaaaaaaaa
bbb

Bước 1: thêm 0 vào bên trái cho dài bằng nhau
aaaaaaaaaaaaaaaaaaaa
00000000000000000bbb

Bước 2: Khởi tạo 1 biến nhớ n = 0, xâu r rỗng. Cộng từ phải qua trái, các cặp chữ số với thêm cả biến nhớ n. Nếu tổng c (a+b+n) lớn hơn 9 thì lấy nó trừ đi 10 thu được c và gán lại biến nhớ n = 1 (không bao giờ nhớ được lên tận 2 vì 9 + 9 + 1 cũng chỉ là 19 ^^). Nếu tổng c nhỏ hơn 10 thì thu được c và gán biến nhớ n = 0. Lưu giá trị c, nhét vào sau r. Sau khi cộng đến cặp chữ số bên trái nhất, nếu nhớ còn là 1 thì thêm 1 vào sau r.

Bước 3: Đảo ngược xâu r, ta có tổng.

Thuật toán chia hai số nguyên lớn:

Chia 12415 cho 23

1 2 4 1 5 chia 2 3 0 0
0 0

23 có 2 chữ số. Lấy 12 chia cho 23, được 0, dư 12. Hạ 4 xuống

1 2 4 1 5 chia 2 3 0 0
0 0 0
1 2 4 0 0

124 chia cho 23 được thương là 5, dư là 9. Hạ 1 xuống

Làm sao tính 124 chia cho 23 được thương và dư là bao nhiêu?

Bước 1. Gán thương t = 0; a = 124; b = 023

Bước 2. Nếu a nhỏ hơn b thì thương là t và dư là a

Bước 3. Gán a = a – b và tăng t lên 1

Quay lại bước 2.

1 2 4 1 5 chia 2 3 0 0
0 5
1 2 4
9 1

Làm tương tự cho đến khi không còn chữ số nào để hạ xuống thì thương là dãy số bên trái (cắt bỏ 0 ở bên trái), số dư là dãy số bên phải.

1 2 4 1 5 chia 2 3
0 5 3 9
1 2 4
9 1
2 2 5
1 8

Gọi SOAP bằng PHP, hàm có tham số phức tạp

var_dump($soapClient->__getFunctions(), $soapClient->__getTypes());
-> để lấy được thông tin hàm, định dạng tham số truyền vào
function f(T1 $parameters)
struct T1 {
T11 a;
string b;
}
struct T11 {
int c;
string d;
}

Khi đó cứ theo struct mà bên trong chỉ chứa các kiểu dữ liệu nguyên thủy (string, number), ta sẽ khai báo ngược lên để có được tham số tương ứng:
$t11 = array(‘c’ => 12, d => ‘twelve’);
$parameters = array(‘a’ => $t11, ‘b’ => ‘valid string’);
$soapClient->__soapCall(array($parameters)); # phải bọc $parameters trong array