2017 7 14 真 高精度

2021-08-03 20:32:43 字數 1823 閱讀 4204

適用範圍:等你會背了再說

(宣告一下這並不是我打的)

/*高精度模版: 大全 */

//根據情況改一下結尾**的輸出

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct wint:vector

//用標準庫vector做基類,完美解決位數問題,同時更易於實現

wint& check()//在各類運算中經常用到的進製小函式,不妨內建

while(back()>=10)

return *this;//為使用方便,將進製後的自身返回引用

}};//輸入輸出

istream& operator>>(istream &is,wint &n)

ostream& operator

<<(ostream &os,const wint &n)

//比較,只需要寫兩個,其他的直接代入即可

//常量引用當引數,避免拷貝更高效

bool

operator!=(const wint &a,const wint &b)

bool

operator==(const wint &a,const wint &b)

bool

operator

<(const wint &a,const wint &b)

bool

operator>(const wint &a,const wint &b)

bool

operator>=(const wint &a,const wint &b)

wint operator+(wint a,const wint &b)

//減法,返回差的絕對值,由於後面有交換,故引數不用引用

wint& operator-=(wint &a,wint b)

}return a.check();

}wint operator-(wint a,const wint &b)

//乘法不能先實現*=,原因自己想

wint operator*(const wint &a,const wint &b)

wint& operator*=(wint &a,const wint &b)

//除法和取模先實現乙個帶餘除法函式

wint divmod(wint &a,const wint &b)

}return ans;

}wint operator/(wint a,const wint &b)

wint& operator/=(wint &a,const wint &b)

wint& operator%=(wint &a,const wint &b)

wint operator%(wint a,const wint &b)

//順手實現乙個快速冪,可以看到和普通快速冪幾乎無異

wint pow(const wint &n,const wint &k)

//通過過載運算子,還可以實現++、--、^、!、邏輯運算子等很多運算,十分簡單,此處都不寫了

int main()//現在你完全可以像int一般便捷地使用wint,如下

高精度除法(高精度除以高精度)

先貼乙個簡單的高精度除以單精度的 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 ...

高精度除以高精度

原 題 高精除以高精,求它們的商和餘數。演算法分析 高精除以高精是用減法模擬除法,對被除數的每一位都減去除數,一直減到當前位置的數字 包括前面的餘數 小於除數 由於每一位的數字小於10,所以對於每一位最多進行10次計算 代 碼 include include include using namesp...