雖然noip不會重點考這個但是為了防止不必要的丟分還是準備一下比較好。
高精度的原理就是我們小學的時候所使用的豎式運算。
所以以字串的形式模擬一下運算過程結果就出來了。
#include#include#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 410
;struct
bign
bign(
intnum)
bign(
const
char *num)
bign
operator = (const
intnum)
bign
operator = (const
char *num)
bign
operator + (const bign &b)
return
c; }
bign
operator += (const bign &b)
void
clean()
bign
operator * (const bign &b)
c.clean();
return
c; }
bign
operator *= (const bign &b)
bign
operator - (const bign &b)
c.s[c.len++] =x;
}c.clean();
return
c; }
bign
operator -= (const bign &b)
bign
operator / (const bign &b)
}c.len =len;
c.clean();
return
c; }
bign
operator /= (const bign &b)
bign
operator % (const bign &b)
bign
operator %= (const bign &b)
bool
operator
< (const bign &b)
bool
operator > (const bign &b)
bool
operator == (const bign &b)
bool
operator >= (const bign &b)
bool
operator
<= (const bign &b)
bool
operator != (const bign &b)
string str() const
};istream& operator >> (istream &in, bign &x)
ostream& operator
<< (ostream &out, bign &x)
intmain()
以上為封裝好的高精度。
請各位大爺盡情享用。
一世安寧
高精度之關於高精度的其他問題
高精度階乘其實就是加法的高階版,樸素的版本可以模擬階乘過程,首先階乘的資料必定不會太大,所以可以持續用高精度乘以低精度進行計算。但是問題是當n 稍微大一點就會導致執行超時。所以可以把n 拆成n n 1 n 2 n 3 或是更少的組進行計算,最後再採用高精度乘以高精度合併結果。當給出的資料位數很大時帶...
高精度除法(高精度除以高精度)
先貼乙個簡單的高精度除以單精度的 include include include using namespace std int main else ys ys 10 a i 0 while c i 0 i for int j i j 0 j printf d c j if ys printf d ...
高精度除高精度
演算法流程 第一步,讀入被除數 a 和 除數 b,判斷是否 a b,是則輸出 0 並結束演算法,否則令 answer 0 第二步,令餘數 remainder 0,令 i 從被除數最高位的下標開始 第三步,令 remainder remainder 10 a i 令 c 9 第四步,判斷是否 b c ...