Các phép toán trên số nguyên lớn
Các phép toán trên số nguyên lớn
Như các bạn đã biết trong ngôn ngữ lập trình C/C++, các số chỉ có thể thực hiện trong phạm vi từ +/- 1.7e +/- 308 (~15 chữ số). Như vậy với các phép toán với các số nguyên từ 15 chữ số trở lên chúng ta phải làm sao? Nếu khai báo kiểu dữ liệu là long double khi nhập số 22 chữ số chẳng hạn chương trình sẽ bị lỗi và dừng hẳn. Vậy làm thế nào để chương trình có thể xử lý các số nguyên lớn. Vậy hôm nay chúng ta sẽ bước sang một mảng kiến thức mới: " Các phép tuấn trên số nguyên lớn"
I. Hướng thực hiện
- Đầu tiên ta cần suy nghĩ đến việc làm thế nào để máy lưu trữ được số nguyên lớn trong khi máy chỉ lưu được 15 chữ số. Ta cần suy nghĩ bài toán theo hướng tích cực hơn. Nói là số nhưng có phải nhất thiết số nhập vào là kiểu số hay không? Vậy là ta nghĩ đến việc sử dụng xâu kí tự (String) để thực hiện các phép toán.
Ví dụ: Đáng lẽ nhập số: 123456789 thực ra chúng ta đang nhập xâu: "123456789".
Với sử dụng xâu ta có thể thực hiện phép tính toán với các số lên đến 255 chữ số.
Ngoài cách so sánh số bằng xâu ta cũng có thể thực hiện bằng mảng. Nhưng việc sử dụng mảng sẽ tốn rất nhiều dữ liệu hơn nên việc chọn xâu vào thực hiện bài toán này là cách tối ưu nhất chúng ta có thể chọn.
Với sử dụng xâu ta có thể thực hiện phép tính toán với các số lên đến 255 chữ số.
Ngoài cách so sánh số bằng xâu ta cũng có thể thực hiện bằng mảng. Nhưng việc sử dụng mảng sẽ tốn rất nhiều dữ liệu hơn nên việc chọn xâu vào thực hiện bài toán này là cách tối ưu nhất chúng ta có thể chọn.
CHÚ Ý: Để dễ dàng học tập mình cho các code màu trắng để các bạn độc lập suy nghĩ trước khi coi lời giải. Để xem code các bạn chỉ cần bôi đen đoạn code là OK.
II. Các phép toán
1. Phép nhập, xuất số: Chúng ta sẽ nhập số giống như nhập xâu kí tự như sau
1 #include <iostream> 2 #include <string.h> 3 using namespace std; 4 int main() 5 { 6 string m,n; 7 cout<<"Nhap m: "; cin>>m; 8 cout<<"Nhap n: "; cin>>n; 9 cout<<m<<" "<<n; 10 return 0; 11 }
2. Phép so sánh hai số:
Để so sánh hai số nguyên lớn ta áp dụng phép so sánh với xâu. So sánh theo thứ tự của các số trong bảng mã ASCII. Nhưng lưu ý rằng do so sánh theo xâu nên "321" lớn hơn "1243" do "3" lớn hơn "1". Xâu so sánh từng chữ số đầu. Để loại bỏ rào cản này ta nghĩ đến 2 cách cơ bản.
C1: So sánh độ dài của số trước sau đó áp dụng quy tắc so sánh xâu.
C2: Thêm số "0" vào số có độ dài nhỏ hơn tiếp tục sử dụng phép so sánh xâu.
Việc sử dụng C1 các bạn tự thực hiện mình sẽ thực hiện C2
Ta có chương trình sau:
Để so sánh hai số nguyên lớn ta áp dụng phép so sánh với xâu. So sánh theo thứ tự của các số trong bảng mã ASCII. Nhưng lưu ý rằng do so sánh theo xâu nên "321" lớn hơn "1243" do "3" lớn hơn "1". Xâu so sánh từng chữ số đầu. Để loại bỏ rào cản này ta nghĩ đến 2 cách cơ bản.
C1: So sánh độ dài của số trước sau đó áp dụng quy tắc so sánh xâu.
C2: Thêm số "0" vào số có độ dài nhỏ hơn tiếp tục sử dụng phép so sánh xâu.
Việc sử dụng C1 các bạn tự thực hiện mình sẽ thực hiện C2
Ta có chương trình sau:
1 #include <iostream> 2 #include <string.h> 3 using namespace std; 4 int main() 5 { 6 string m,n; 7 cout<<"Nhap m: "; cin>>m; 8 cout<<"Nhap n: "; cin>>n; 9 cout<<m<<" "<<n; 10 return 0; 11 }
The Best Coin Casino Sites to Get Bonuses From - CasinoWow
ReplyDeleteBest Bitcoin Casino Sites casinowed.com — Best Coin Casino Sites · 10CRIC https://febcasino.com/review/merit-casino/ Casino https://shootercasino.com/emperor-casino/ · wooricasinos.info BitStarz Casino · BetMGM Casino · LeoVegas Casino · Casino No Deposit 출장마사지 Bonus · LeoVegas Casino.