Các phép tính với số nguyên lớn
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Các phép tính với số nguyên lớn Các phép tính với số nguyên lớn & mã nguồn C++Cộng, trừ, nhân, chia số nguyên lớn, mã nguồn C++#include #include using namespace std;#define MAXLEN 1000struct SNL{ char sign;//dấu, nếu số âm thì sign=-1 char len;//chiều dài char num[MAXLEN];//lưu các chữ số};void initSNL(SNL &n);//Khởi tạo số nguyên lớnvoid str2snl(char *str, SNL &n);//Chuyển một chuỗi kí tự thành số nguyên lớnvoid scanSNL(SNL &n);//Đọc số nguyên lớn từ bàn phímvoid printSNL(SNL &n);//In số nguyên lớn ra màn hìnhint cmpu(SNL &a, SNL &b);//So sánh 2 số nguyên lớn không xét dấuint cmp(SNL &a, SNL &b);//So sánh 2 số nguyên lớn, nếu a>b trả về 1, a=btrả về 0, a{ int i; if (str[0]==-) { n.sign=-1; str++; //bỏ qua kí tự đầu tiên } else n.sign=1; n.len=strlen(str);//Chiều dài (số chữ số) của số nguyên lớn for (i=0; ib.len)//Số nào dài hơn thì số đó lớn hơn return 1; else if (a.len=0) { //So sánh từ chữ số if (a.num[len]>b.num[len]) return 1; else if (a.num[len] } return 0;}int cmp(SNL &a, SNL &b){ if (a.sign * b.sign>t; str2snl(t,n); delete []t;}void printSNL(SNL &n){ if (n.sign { s.num[i] -= 10; m = 1; } else m = 0; } i f ( m) { s.num[s.len]=1; s.len++; }}void add(SNL &s, SNL &a, SNL &b){ if (a.sign*b.sign>0)//Nếu a và b cùng dấu { addu(s,a,b); s.sign=a.sign;//Dấu của s cũng là dấu của a hoặc b } else { int t=cmpu(a,b); if (t==1) { subu(s,a,b); s.sign=a.sign; } else if (t==-1) { subu(s,b,a); s.sign=b.sign; } else InitSNL(s); }}void subu(SNL &r, SNL &a, SNL &b){ InitSNL(r); r.len=a.len>b.len?a.len:b.len; int m=0; for (int i=0; i for (int j=0; j=b.len) { int blen=b.len; int i; if (a.len>b.len) { i=a.len-1; int x=a.len-b.len; while (i>=0) { if (i>=x) b.num[i]=b.num[i-x]; else b.num[i]=0; i--; } } b.len=a.len; SNL d; i = 1; while (b.len>=blen) { while (cmpu(a,b)>-1) { subu(d,a,b); r.num[r.len-i]++; a = d; } b.len--; i++; for (int k=0; k mul(c,a,b); cout{ char sign; char len; char num[MAXLEN]; friend istream& operator >> (istream&, BigInt&); friend ostream& operator = (const BigInt&) const; bool operator > (const BigInt&) const; bool operator BigInt operator + (const BigInt&) const; BigInt operator - (const BigInt&) const; BigInt operator * (const BigInt&) const; BigInt operator / (const BigInt&) const; BigInt operator % (const BigInt&) const; BigInt operator - () const; BigInt& operator ++ (); BigInt operator ++ (int); BigInt& operator -- (); BigInt operator -- (int); ~BigInt();};#endifTập tin BigInt.cpp//(c) http://kithuatlaptrinh.tk#include BigInt.histream& operator >> (istream& inDev, BigInt& n){ return n.read(inDev);}ostream& operator > strTemp; getSz(strTemp); delete []strTemp; return inDev;}void BigInt::getInt(int n){ char strTemp[10]; _itoa_s(n, strTemp, 10); getSz(strTemp);}void BigInt::getSz(const char* str){ init(); if (str[0] == -) { sign = -1; ++str; } else sign = 1; len = strlen(str); for (int i = 0; i < len; ++i) num[i] = str[len - i - 1] - 0;}ostream& BigInt::write(ostream& outDev){ if (sign < 0) outDev 0) for (int i = len - 1; i >= 0; --i) outDev return outDev;}void BigInt::init(){ sign = 1; len = 0; for (int i = 0; i < MAXLEN; ++i) num[i] = 0;}BigInt::BigInt(){ init();}BigInt::BigInt(int n){ getInt(n);}BigInt::BigInt(const char* str){ getSz(str);}BigInt& BigInt::operator = (const BigInt& n){ len = n.len; sign = n.sign; for (int i = len - 1; i >=0; --i) num[i] = n.num[i]; return *this;}BigInt& BigInt::operator = (const char* str){ getSz(str); return *this;}BigInt& BigInt::operator = (int n){ getInt(n); return *this;}int BigInt::cmpu(const BigInt &n) const{ if (len > n.len) return 1; else if (len < n.len) return -1; else { int t = len - 1; while (t >= 0) { if (num[t] > n.num[t]) return 1; else if (num[t] < n.num[t]) return -1; else --t ; } } return 0;}int BigInt::cmp(const BigInt &n) const{ if (sign * n.sign < 0) return sign; return sign * cmpu(n);}bool BigInt::operator == (const BigInt& n) const{ return cmp(n) == 0;}bool BigInt::operator != (const BigInt& n) const{ return cmp(n) != 0;}bool BigInt::operator < (const BigInt& n) const{ return cmp(n) < 0;}bool BigInt::operator >= (const BigInt& n) const{ return cmp(n) >= 0;}bool BigInt::operator > (const BigInt& n) const{ return cmp(n) > 0;}bool BigInt::operator { r.num[i] = num[i] + n.num[i] + m; if (r.num[i] > 9) { r.num[i] -= 10; m = 1; } else m = 0; } i f (m ) { r.num[r.len] = 1; r.len++; } return r;}BigInt& BigInt::subu(const BigInt& n, BigInt& r) const{ r.len = len > n.len ? len : n.len; int m = 0; for (int i = 0; i < r.len; ++i) { if (num[i] < n.num[i] + m) { r.num[i] = 10 + num[i] - n.num[i] - m; m = 1; } else { r.num[i] = num[i] - n.num[i] - m; m = 0; } } while (r.num[r.len - 1] == 0) --r.len; return r; ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin cấu trúc dữ liệu lý thuyết đồ thị Javascript ASP.NET Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngTài liệu cùng danh mục:
-
2 trang 433 6 0
-
Giải bài toán người du lịch qua phép dẫn về bài toán chu trình Hamilton
7 trang 380 0 0 -
Đề thi kết thúc môn học Nhập môn Toán rời rạc năm 2020-2021 có đáp án - Trường ĐH Đồng Tháp
3 trang 345 14 0 -
Giáo trình Giải tích Toán học: Tập 1 (Phần 1) - GS. Vũ Tuấn
107 trang 336 0 0 -
Giáo trình Xác suất thống kê: Phần 1 - Trường Đại học Nông Lâm
70 trang 323 5 0 -
Giáo trình Toán kinh tế: Phần 1 - Trường ĐH Kinh doanh và Công nghệ Hà Nội (năm 2022)
59 trang 295 0 0 -
5 trang 266 0 0
-
Cách tính nhanh giá trị riêng của ma trận vuông cấp 2 và cấp 3
4 trang 252 0 0 -
Đề xuất mô hình quản trị tuân thủ quy trình dựa trên nền tảng điện toán đám mây
8 trang 245 0 0 -
Đề thi giữa kỳ Toán cao cấp C1 (trình độ đại học): Mã đề thi 134
4 trang 238 3 0
Tài liệu mới:
-
Thu hút đầu tư trở lại quê hương của các đồng bào đang làm ăn sinh sống xa tổ quốc
20 trang 0 0 0 -
17 trang 0 0 0
-
26 trang 0 0 0
-
16 trang 0 0 0
-
57 trang 0 0 0
-
uảng cáo trên radio – Kênh truyền thông bạn đã bỏ qua?.Khi chiếc radio nghe
7 trang 0 0 0 -
Đề tài “Hoàn thiện kế toán bán hàng tại Công ty Cổ Phần Thiết Bị Tân Phát”
57 trang 0 0 0 -
96 trang 0 0 0
-
83 trang 0 0 0
-
Mạng xã hội 2011: nhiều bất ngờ chờ phía trước
10 trang 1 0 0