大數處理 詳解 模版

2022-06-26 05:09:11 字數 4741 閱讀 3425

1 #include2 #include

3 #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...