大數計算 陣列模擬 加減乘除

2022-02-27 15:05:32 字數 3053 閱讀 8405

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 5000;//

idea : s[0]做符號位, s[0]=0(0),1(>0),-1(<0)

struct

bignum

//過載 '=', 引數為字串

bignum operator = (const

char *str)

//過載 '=', 引數為整型數

bignum operator = (const

intnum)

//構造

bignum(const

char* str)

bignum(

const

int num)

//用於輸出函式

string str() const

if (res == "") //

如果為空字元,即為0

res = "0"

;

return

res;

}//過載 +

bignum operator + (const bignum&b)

//避免高位為0

while (x.s[x.len] == 0 && len >= 1

) x.len--;

return

x; }

bignum& operator += (const bignum&b)

//過載比較函式

bool

operator

< (const bignum& b) const

//<

return

false

; }

bool

operator > (const bignum& b) const //

>

bool

operator >= (const bignum& b) const //

>=

bool

operator

<= (const bignum& b) const //

<=

bool

operator != (const bignum& b) const //

!=bool

operator == (const bignum& b) const //

==

//過載 -

bignum operator - (const bignum&b)

x.len = i-1

;

while (x.s[x.len] == 0 && x.len > 1) //

消除高位為 0

x.len--;

return

x; }

}bignum& operator -= (const bignum&b)

//過載 '*'

bignum operator * (const

long

long&b)

x.len =i;

while (x.s[len] == 0 && x.len >= 1) //

消除高位為 0

x.len--;

return

x; }

//'*'

bignum operator * (const bignum&b)

for (i = 1, g = 0; (i <= len + lenb - 1) || g != 0; i++) //

進製為 0時,或者達到最高位時跳出迴圈

c.len = i-1; //

設定結果的長度為 i-1

while (c.s[c.len] == 0 && c.len > 1) //

消除高位為 0,,,不能 >= 1---除數不為0

c.len--;

return

c; }

bignum

operator ^ (int

n)

m = m -i;

result = result *tmp;

if (m == 1

) result = result * (*this

); }

return

result;

} //過載 '/' -------- 試除法

bignum operator / (const bignum&b)

}while (c.s[c.len] == 0 && c.len > 1) //

消除高位為 0

c.len--;

return

c;

} bignum

operator % (const bignum &n) //

大數 '%' 大數

bignum

operator % (const

int &n) //

大數 '%' int

};//

用string類,直接動態寫入

istream& operator >> (istream& in, bignum&b)

//過載為普通函式,呼叫已經寫好的成員函式 str() 輸出

ostream& operator

<< (ostream& out, const bignum&b)

intmain()

大數加減乘除

include include include include includeusing namespace std compare比較函式 相等返回0,大於返回1,小於返回 1 int compare string str1,string str2 if cf 0 str char cf 0 st...

大數加減乘除

對於大數的加減乘除都要先把輸入的大數字串轉成倒序的陣列,再進行運算。字串的處理 scanf s s a1,b1 len 0 for int i strlen a1 1 i 0 i len 0 for int i strlen b1 1 i 0 i len max strlen a1 strlen b...

大數的加減乘除

當數的位數非常大而常規的資料型別不足以儲存的時候,可以考慮使用大數。即用乙個長的陣列來儲存相應的位數,如int a 100 a的每一位儲存一位數字或幾位數字,根據常規的加減乘除運算對陣列進行操作。使用string型別對陣列進行操作,雖然比用整型簡便,但可 能增加了執行時間。pku1001 expon...