Biểu diễn số lớn [2], [4]

Một phần của tài liệu Số học số lớn cho mật mã luận án thạc sĩ (Trang 36 - 40)

6. Ý nghĩa khoa học và thực tiễn cửa đề tài

2.1 Biểu diễn số lớn [2], [4]

Có nhiều các để biểu diễn và lƣu số lớn. Trong luận văn này số lớn đƣợc xây dựng thành một đối tƣợng BigNum có hai thuộc tính là danh sách data kiểu dữ liệu sbyte( 128 to 127, 8 bit integer) và thuộc tính len có kiểu dữ liệu int.

Trong đó List<sbyte> data dùng để biểu diễn và lƣu trữ thành một danh sách các chữ số và len dùng để lƣu số phần tử của danh sách. Các số lớn

a0a1…an đƣợc biểu diễn thành danh sách nhƣ sau:

an an 1 … a0

Các chữ số đƣợc lần lƣợt lƣu trữ vào danh sách theo thứ tự ngƣợc để tiện cho việc thao tác tính toán sau này:

Chữ số a0 đƣợc lƣu vào phần tử data[n] Chữ số a1 đƣợc lƣu vào phần tử data[n 1] Chữ số an đƣợc lƣu vào phần tử data[0]

Dấu của số lớn đƣợc đặt ở phần tử cuối cùng của danh sách, nếu dấu âm giá trị sẽ đƣợc biểu diễn bằng số 1 còn không thì vẫn dữ nguyên.

Thí dụ 1: Biểu diễn số x = 123456099

Số x gồm có 9 chữ số vậy số x đƣợc biểu diễn là một danh sách có 9 phần tử kiểu sbyte. Đƣợc mô tả nhƣ hình dƣới đây:

9 9 0 6 5 4 3 2 1  Thí dụ 2: Biểu diễn số y = 23500

Số y gồm có 5 chữ số và có dấu vậy số y đƣợc biểu diễn là một danh sách có 6 phần tử kiểu sbyte. Đƣợc mô tả nhƣ hình dƣới đây:

0 0 5 3 2 1

Việc lƣu trữ bằng đối tƣợng danh sách (List<sbyte>) trong ngôn ngữ C# rất tiện dụng vì không phải khái báo trƣớc số phần tử nhƣ khi sử dụng mảng Array để lƣu trữ, giúp tiết kiệm tài nguyên của máy tính. Để khởi tạo giá trị cho số lớn ta xây dựng các hàm khởi tạo áp dụng phƣơng thức chồng hàm, để có thể tạo số lớn bằng các nhập dữ liệu bằng string hoặc kiểu long. Các hàm khởi tạo đƣợc định nghĩa nhƣ sau:

 Hàm khởi tạo không tham số: Khởi tạo đối tƣợng với hai thuộc tính là danh sách chứa dữ liệu (data) rỗng và thuộc tính độ dài (len) bằng 0 public BigNum()

{

this.data = new List<sbyte>(); this.len = 0;

}

Thí dụ: BigNum(). Khởi tạo số BigNum rỗng.

 Hàm khởi tạo với tham số kiểu BigNum: Tạo đối tƣợng với tham số truyền vào là một đối tƣợng kiểu BigNum. Duyệt từ đầu danh sách đến cuối danh sách của đối tƣợng truyền vào để lấy dữ liệu thêm vào danh sách của đối tƣợng cần khởi tạo. Cuối cùng lấy độ dài của đối tƣợng truyền vào cần khởi tạo bằng với độ dài của đối tƣợng.

public BigNum(BigNum bn)

{

this.data = new List<sbyte>(); for (int i = 0; i < bn.len; ++i) {

this.data.Add (bn.data[i]); }

this.len = bn.len; }

 Hàm khởi tạo với tham số kiểu string (chuỗi số nguyên): Độ dài của đối tƣợng mới khởi tạo bằng độ dài của chuỗi truyền vào. Duyệt từ cuối độ dài của chuỗi truyền vào, lấy từng ký tự ở vị trí thứ i(0 ≤ i ≤ độ dài của chuỗi) chuyển thành kiểu sbyte thêm vào danh sách của đối tƣợng muốn khởi tạo. Nếu phần tử thứ i của chuỗi là ký tự „ ‟ và i = 0 thì ta thêm 1 vào cuối danh sách của đối tƣợng cần khởi tạo để biểu thị dấu.

public BigNum(string str)

{

NumberFormatInfo provider = new NumberFormatInfo();

provider.NumberDecimalSeparator = ".";

provider.NumberNegativePattern = 0;

this.data = new List<sbyte>(); this.len = str.Length;

for (int i = this.len - 1; i >= 0; --i) {

if (str.Substring(i, 1).Equals("-")) {

if(i==0) this.data.Add(-1); } else { this.data.Add(ConvertToSByte(str.Substring(i, 1), provider)); } } } Thí dụ: BigNum(“ 12345690”) đƣợc lƣu trữ: 0 9 6 5 4 3 2 1 1

 Hàm khởi tạo với tham số kiểu long: Chuyển đổi tham số truyền vào là kiểu long thành kiểu string rồi thực hiện nhƣ hàm khởi tạo với tham số kiểu string ở trên.

public BigNum(Int64 inumber)

{

NumberFormatInfo provider = new NumberFormatInfo();

provider.NumberDecimalSeparator = ".";

provider.NumberNegativePattern = 0;

string str = inumber.ToString(); this.data = new List<sbyte>(); this.len = str.Length;

for (int i = this.len - 1; i >= 0; --i) { if (str.Substring(i, 1).Equals("-")) { if (i == 0) this.data.Add(-1); } else { this.data.Add(ConvertToSByte(str.Substring(i, 1), provider)); } } } Thí dụ: BigNum(12345690) đƣợc lƣu trữ: 0 9 6 5 4 3 2 1

Một phần của tài liệu Số học số lớn cho mật mã luận án thạc sĩ (Trang 36 - 40)

Tải bản đầy đủ (PDF)

(72 trang)