
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ó liên quan:
-
52 trang 465 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 366 0 0 -
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 357 0 0 -
96 trang 333 0 0
-
74 trang 329 0 0
-
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 318 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 318 1 0 -
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 310 0 0 -
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 303 0 0 -
Tài liệu hướng dẫn sử dụng thư điện tử tài nguyên và môi trường
72 trang 300 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 292 0 0 -
64 trang 290 0 0
-
Bài giảng An toàn và bảo mật thông tin - Trường đại học Thương Mại
31 trang 271 0 0 -
Tài liệu hướng dẫn thực hành Tin học đại cương - ĐH Bách Khoa Hà Nội
40 trang 263 0 0 -
47 trang 261 0 0
-
LUẬN VĂN: TÌM HIỂU PHƯƠNG PHÁP HỌC TÍCH CỰC VÀ ỨNG DỤNG CHO BÀI TOÁN LỌC THƯ RÁC
65 trang 260 0 0 -
Giáo trình Hệ điều hành: Phần 2
53 trang 254 0 0 -
Đề cương chi tiết học phần Lý thuyết đồ thị (Graph Theory)
13 trang 253 0 0 -
Giáo trình Tin học đại cương part 7
19 trang 253 0 0 -
63 trang 230 0 0