高精度演算法(加減乘除)

2021-10-10 08:40:29 字數 2473 閱讀 6585

在遇到一些例如1e^100000這樣的資料的時候,我們無法處理,那麼我們需要高精度來處理,用long long都沒有辦法處理,利用高精度處理方法是用字串的手法處理。

高精度加法:

思路:就是我們人類的加法,從最小位數開始,先算好以後再進行進製操作即可,考慮進製的問題。

#include

using

namespace std;

const

int n=

1e6+10;

vector<

int>a,b;

string a,b;

vector<

int>

add(vector<

int>

&a,vector<

int>

&b)if

(tmp)c.

push_back(1

);return c;

}int

main()

高精度減法:

思路:人類的減法,從最低位開始減,考慮借位的問題。

#include

using

namespace std;

vector<

int>a,b;

bool

cmp(vector<

int>

&a,vector<

int>

&b)return1;

}vector<

int>

substract

(vector<

int>

&a,vector<

int>

&b)while

(c.size()

>

1&&c.

back()

==0)c.pop_back()

;//去除前導零

return c;

}int

main()

else

return0;

}

高精度乘法:

思路:人類的乘法思路,從最低位開始乘,考慮進幾位和保留最低位的問題。

1.高精度乘以低精度:

#include

using

namespace std;

const

int n=

1e6+5;

string a;

vector<

int>a;

int b;

vector<

int>

mul(vector<

int>

&a,int b)

while

(c.size()

>

1&&c.

back()

==0)c.pop_back()

;return c;

}int

main()

2.高精度乘以高精度:

#include

using

namespace std;

vector<

int>a,b;

string a,b;

vector<

int>

mul(vector<

int>

&a,vector<

int>

&b)while

(c.size()

>

1&&c.

back()

==0)c.pop_back()

;return c;

}int

main()

高精度除法:

思路:這裡的思路和人類的除法一樣,不過和加減乘不一樣,因為加減乘是用最低位開始運算的,但是除法是從最高位開始運算的,要考慮的是餘數的問題,每次運算完的下一次是上一次的餘數*10再加上下一位,以此類推。

#include

using

namespace std;

vector<

int>a;

string a;

int b;

vector<

int>

div(vector<

int>

&a,int b,

int&r)

reverse

(c.begin()

,c.end()

);while

(c.size()

>

1&&c.

back()

==0)c.pop_back()

;return c;

}int

main()

在這裡放出幾道模板題

高精度加法:洛谷p1601

高精度乘法:洛谷p1303

高精度除法:洛谷p1249

高精度演算法,加減乘除

高精度演算法的兩個基本問題 高精度數的表示和高精度數的基本運算 1.高精度數的表示 首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中 int arr 100 string str cin str int len str.length ...

高精度演算法(加減乘除)

最近開始學習解決大數問題,在這裡記錄下自己的學習情況。問題描述 我有乙個非常簡單的問題。給定兩個整數a和b,你的工作是計算a b的和。輸入 輸入的第一行包含整數t 1 t 20 表示測試用例的數量。然後是t行,每行包含兩個正整數,a和b.請注意,整數非常大,這意味著您不應該使用32位整數來處理它們。...

高精度加減乘除

一。高精度乘法 敲了好久。頭禿 str1,str2是存數字的字串,返回最後的位數,c儲存結果 int highmult char str1,char str2,int c b len2 1 int i,j memset a,0,sizeof a memset b,0,sizeof b memset ...