1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include
9 #include10 #include
11 #include12 #include13 #include14 #include15
using
namespace
std;
16char str[1000001],modd[1000000]; //
這裡做了修改 多加了兩個0 能儲存更大的值
17#define maxn 9999 //
18#define maxsize 10 //
只和 下面的 過載運算子 有關 .
19#define dlen 4 //
決定了 , 下面的 int 型 a 陣列 , 乙個 單位內 儲存 數字為 幾位 ( 當然是 空間利用的 越充分 越好 , 不過 這要根據實際情況來說 . )
20class
bignum
21 //
建構函式
27 bignum(const
int); //
將乙個int型別的變數轉化為大數
28 bignum(const
char*); //
將乙個字串型別的變數轉化為大數
29 bignum(const bignum &); //
拷貝建構函式
30 bignum &operator=(const bignum &); //
過載賦值運算子,大數之間進行賦值運算
3132 friend istream& operator>>(istream&, bignum&); //
過載輸入運算子
33 friend ostream& operator
<<(ostream&, bignum&); //
過載輸出運算子
3435 bignum operator+(const bignum &) const; //
過載加法運算子,兩個大數之間的相加運算
36 bignum operator-(const bignum &) const; //
過載減法運算子,兩個大數之間的相減運算
37 bignum operator*(const bignum &) const; //
過載乘法運算子,兩個大數之間的相乘運算
38 bignum operator/(const
int &) const; //
過載除法運算子,大數對乙個整數進行相除運算
3940 bignum operator^(const
int &) const; //
大數的n次方運算
41int
operator%(const
int &) const; //
大數對乙個int型別的變數進行取模運算
42bool
operator>(const bignum & t)const; //
大數和另乙個大數的大小比較
43bool
operator>(const
int & t)const; //
大數和乙個int型別的變數的大小比較
4445
void print(); //
輸出大數
46};
47 bignum::bignum(const
int b) //
將乙個int型別的變數轉化為大數
4858 a[len++] =d;59}
60 bignum::bignum(const
char*s) //
將乙個字串型別的變數轉化為大數
6179
}80 bignum::bignum(const bignum & t) : len(t.len) //
拷貝建構函式
8187 bignum & bignum::operator=(const bignum & n) //
過載賦值運算子,大數之間進行賦值運算
8896 istream& operator>>(istream & in, bignum & b) //
過載輸入運算子
97111 b.a[count]=sum;
112 count++;
113}
114 b.len =count++;
115returnin;
116117
}118 ostream& operator
<<(ostream& out, bignum& b) //
過載輸出運算子
119128
return
out;
129}
130131 bignum bignum::operator+(const bignum & t) const
//兩個大數之間的相加運算
132144
}145
if(t.a[big] != 0
)146 t.len = big + 1
;147
else
148 t.len =big;
149return
t;150
}151 bignum bignum::operator-(const bignum & t) const
//兩個大數之間的相減運算
152162
else
163168 big=t1.len;
169for(i = 0 ; i < big ; i++)
170181
else
182 t1.a[i] -=t2.a[i];
183}
184 t1.len =big;
185while(t1.a[len - 1] == 0 && t1.len > 1
)186
190if
(flag)
191 t1.a[big-1]=0-t1.a[big-1
];192
return
t1;193
}194
195 bignum bignum::operator*(const bignum & t) const
//兩個大數之間的相乘運算
196212
else
213217
}218
if(up != 0
)219 ret.a[i + j] =up;
220}
221 ret.len = i +j;
222while(ret.a[ret.len - 1] == 0 && ret.len > 1
)223 ret.len--;
224return
ret;
225}
226 bignum bignum::operator/(const
int & b) const
//大數對乙個整數進行相除運算
227235 ret.len =len;
236while(ret.a[ret.len - 1] == 0 && ret.len > 1
)237 ret.len--;
238return
ret;
239}
240int bignum::operator %(const
int & b) const
//大數對乙個int型別的變數進行取模運算
241247
return d; //
這時候 直接 輸出就行 .
248}
249 bignum bignum::operator^(const
int & n) const
//大數的n次方運算
250267 m-=i;
268 ret=ret*t;
269if(m==1
)270 ret=ret*(*this
);271
}272
return
ret;
273}
274bool bignum::operator>(const bignum & t) const
//大數和另乙個大數的大小比較
275289
else
290return
false
;291
}292
bool bignum::operator >(const
int & t) const
//大數和乙個int型別的變數的大小比較
293297
298void bignum::print() //
輸出大數
299308 cout <309}
310int
main()
311321
big.print();
322}
323 }
大數模版 (Kuangbin模版)
直接嵌入 中用即可。完全大數模板 輸出cin a 輸出a.print 注意這個輸入不能自動去掉前導0的,可以先讀入到char陣列,去掉前導0,再用建構函式。define maxn 9999 define maxsize 1010 define dlen 4 class bignum bignum c...
C 類模版詳解
有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同,如下面語句宣告了乙個類 class compare int int max int min float min numtype max numtype min numtype max numtype min 歸納以上的介紹,可以這樣宣告和使用...
模版 大數加減乘除
因為計算大數除法時需要用到乘法和減法,但是不指定字串長度的乘法和減法不容易用字元陣列表示,所以這裡就沒寫用字元陣列計算的大數除法。o o 大數加減乘 僅限正整數 加法測試 hdu 1002 減法測試 百練oj 2736 乘法測試 百練oj 2980 include include include i...