1 [Lời giải]Bài toán nhân 2 số có thể có tới 100 chữ số Wed May 11, 2011 12:52 pm
Admin
Quản trị viên
Đề thầy ra:
Cho 2 số nguyên dương a và b có thể có tới 100 chữ số.
Viết giải thuật để in ra màn hình số c = a * b
Bàn luận:
Không thể làm phép nhân thông thường cho máy tính vì mỗi biến giá trị nguyên dương không quá 65535.
Giải pháp: Sử dụng mỗi số a, b, c là các mảng. Mỗi chữ số của a, b, c là một phần tử. Ta nhanh chóng nhận ra là các phần tử này chỉ là một trong những con số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Đây là giải thuật mà thầy đưa ra:
1. Gọi:
m: /a/, độ dài của a
n: /b/, độ dài của b
2. Khai báo mảng c = 0
Qui ước phần tử thứ nhất là hàng đơn vị
c có chiều dài lớn nhất là 201 chữ số.
Khi đó, giả sử m > n:
a = {am, am-1,..., a1}
b = {bn, bn-1,..., b1}
3. Đặt biến nhớ về 0. Lấy từng con số của a nhân với b. Ta có:
nhớ1 := 0;
for i = 1 to m
for j = 1 to n
t:= ai * bj + nhớ
x:= t mod 10
nhớ1 := t div 10
4. Đặt
l = max {/c/; /x/}
Thêm số 0 vào số ngắn
for t: = len (c) to l
Ct := 0
Nhớ2 = 0
for t = 1 to l
tg := ct + xt + nhớ2
ct := tg mod 10
nhớ: = tg div 10
If nhớ >0 then
Cl + 1 : = 1
Cho 2 số nguyên dương a và b có thể có tới 100 chữ số.
Viết giải thuật để in ra màn hình số c = a * b
Bàn luận:
Không thể làm phép nhân thông thường cho máy tính vì mỗi biến giá trị nguyên dương không quá 65535.
Giải pháp: Sử dụng mỗi số a, b, c là các mảng. Mỗi chữ số của a, b, c là một phần tử. Ta nhanh chóng nhận ra là các phần tử này chỉ là một trong những con số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Đây là giải thuật mà thầy đưa ra:
1. Gọi:
m: /a/, độ dài của a
n: /b/, độ dài của b
2. Khai báo mảng c = 0
Qui ước phần tử thứ nhất là hàng đơn vị
c có chiều dài lớn nhất là 201 chữ số.
Khi đó, giả sử m > n:
a = {am, am-1,..., a1}
b = {bn, bn-1,..., b1}
3. Đặt biến nhớ về 0. Lấy từng con số của a nhân với b. Ta có:
nhớ1 := 0;
for i = 1 to m
for j = 1 to n
t:= ai * bj + nhớ
x:= t mod 10
nhớ1 := t div 10
4. Đặt
l = max {/c/; /x/}
Thêm số 0 vào số ngắn
for t: = len (c) to l
Ct := 0
Nhớ2 = 0
for t = 1 to l
tg := ct + xt + nhớ2
ct := tg mod 10
nhớ: = tg div 10
If nhớ >0 then
Cl + 1 : = 1