在遇到一些例如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 ...