在資料範圍超過long long 的範圍時,就要考慮到高精度,對於高精度減法而言,本文介紹的兩個數均 >= 0, 高精度減法的實質是用**去模擬我們的減法運算,包括借位…正負號種種問題,這裡用vector 來模擬兩個大數相減,先貼**:
#pragma gcc optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define pm make_pair
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n =
1e4+50;
const
int mod =
1e9+7;
const
int inf =
0x3f3f3f3f
;const
double eps =
1e-8
;vector<
int> a, b;
bool
cmp(vector<
int>
&a, vector<
int>
&b)vector<
int>
sub(vector<
int>
&a, vector<
int>
&b)while
(!c.
back()
&& c.
size()
>
1) c.
pop_back()
;return c;
}int
main()
else
return0;
}
模擬過程和高精度加法是類似的,具體可以移步c++ 高精度加法,這裡不再具體介紹,首先,如果a >= b 則直接a - b 即可,如果a < b ,實質上就是- (b - a), 所以要視情況判斷是否帶符號和交換。在模擬借位時,實際上就是在下一位多減乙個1,在當前位 + 10,用 t 來描述借位。假設該位兩個數為a[i], b[i] 如果a[i] - b[i] >= 0, 則 t 此時應該 = 0,因為不用借位。反之,t 應該等於 1,在下一位時應該把這個 1 減掉,>=0 時,當前位的答案就是 t ,當 < 0 時,當前的答案是 a[i] - b[i] + 10,我們可以用乙個表示式涵蓋這兩種情況:t = (t + 10) % 10,可以思考一下為什麼這樣寫,很好理解。 C 高精度減法及模板
在資料範圍超過long long 的範圍時,就要考慮到高精度,對於高精度減法而言,本文介紹的兩個數均 0,高精度減法的實質是用 去模擬我們的減法運算,包括借位 正負號種種問題,這裡用vector 來模擬兩個大數相減,先貼 pragma gcc optimize 2 include include i...
C 高精度減法模板
高精度減法要注意的是被減數必須必減數大,同時需要處理借位。方法類似於高精度加法。include include include include include include define n 1001 using namespace std int main for i 0 i lena i a ...
模板 C 高精度減法
高精度減法和高精度加法同理,都是模擬人在紙上進行的運算。但與高精度加法不同的是,高精度減法在運算前要保證大的數減去小的數,如果輸入的被減數小於減數,則需調換被減數與減數字置並在結果前新增負號。當進行到某一位運算需要借位時,直接將更高一位的數字減一,並用10減去減數的這一位,再加上被減數。如下 inc...