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