-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbignumber.h
91 lines (73 loc) · 2.66 KB
/
bignumber.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#ifndef BIGNUMBER_H
#define BIGNUMBER_H
#include <iostream>
#define BASE 1000000000
#define DIV_ON_ZERO 1
/*
大数模板
*/
class bigNumber
{
public:
bigNumber();
bigNumber(const char* String);
bigNumber(const bigNumber& RightHandValue);
bigNumber(long long int RightHandValue);
~bigNumber();
char* GetString();
char* __str__();
char* __repr__();
bool GetNumberFromFile(const char* FileName);
bool SaveNumberToFile(const char* FileName);
bool GetNumberFromBinFile(const char* FileName);
bool SaveNumberInBinFile(const char* FileName);
bool Odd();
bigNumber operator=(const bigNumber& RightHandValue);
bigNumber operator+(const bigNumber& right) const;
bigNumber operator-() const;
bigNumber operator-(const bigNumber& right) const;
bigNumber operator*(const bigNumber& right) const;
bigNumber operator/(const bigNumber& right) const;
bigNumber operator%(const bigNumber& right) const;
bigNumber operator^(const bigNumber& right) const;
bool operator>(const bigNumber& B);
bool operator>=(const bigNumber& B);
bool operator<(const bigNumber& B);
bool operator<=(const bigNumber& B);
bool operator==(const bigNumber& B);
bool operator!=(const bigNumber& B);
bigNumber operator+(const int& right) const;
bigNumber operator-(const int& right) const;
bigNumber operator*(const int& right) const;
bigNumber operator/(const int& right) const;
bigNumber operator%(const int& right) const;
bool operator>(const int& B);
bool operator>=(const int& B);
bool operator<(const int& B);
bool operator<=(const int& B);
bool operator==(const int& B);
bool operator!=(const int& B);
friend std::ostream& operator<<(std::ostream &out, bigNumber A);
friend std::istream& operator>>(std::istream &is, bigNumber &A);
bigNumber _Sum_and_Sub(const bigNumber& left, const bigNumber& right) const;
bigNumber _Multiplication(const bigNumber A, const bigNumber B) const;
bigNumber _Division(const bigNumber& A, const bigNumber& B, bigNumber &remainder) const;
unsigned int & operator[](int i);
unsigned int operator[](int i) const;
private:
int _size;
unsigned int* _digits;
int _sign;
void _SetSize(int size);
void _Copy(const bigNumber &rhv);
void _DelNeedlessZeros();
long long int _Compare(const bigNumber& B);
void _ShiftLeft(int s);
friend bigNumber GenerateRandomLen(int bitLen);
friend bigNumber GenerateRandomMax(bigNumber max);
};
//获取指定bit长度的随机数
bigNumber GenerateRandomLen(int bitLen);
//获取不大于max的随机数
bigNumber GenerateRandomMax(bigNumber max);
#endif // BIGNUMBER_H