高精度之乘除法

2021-09-16 22:54:54 字數 1667 閱讀 6397

高精度篇————

乘除法咳咳,最近一直在研究該怎麼講接下來的高精度

先說另一件事

家長的一位朋友說,高精度加法可以改進

如果在化字元為數字時把加法做了

可以省三個10000的一維陣列

因此我把改進後的**也奉上

#include #include using namespace std;

string add(string s1,string s2)

if(f) ans='1'+ans;

return ans;

}int main()

,b[10005]=,s[10005]=,w=0,l1=s1.size(),l2=s2.size(),l=max(l1,l2);//定義

string ans="";

for(i=0;i>v1>>v2;

cout其實大體上和加法差不多,但是要理解其中的方法

3.插曲

這就要牽扯到開頭講的方法

你要是用正在乘的時候整理

你會發現——

痛不欲生!

因為這種方法只能算一次,而乘法涉及多位數

因此不可以省空間

那麼,除法可不可以呢?

我的回答很肯定:不行!

4.除法思想

首先,除法與前三個演算法都不一樣

比如光看豎式

就會發現除法是個異類

因此,不能使用正常的演算法

那麼引入一種新的思想

來分析一下除法的思想:

一是上面的豎式

二是_中有幾個_

第一肯定可以,但是很難模擬

於是用第二種方法實現

5.除法實現

詳細看注釋

#include#includeusing namespace std;

bool str_judge_size(string s1,string s2)//判斷s1和s2的大小

string sub(string s1,string s2)//高精度減法就不用再說了吧^_^

,b[10005]=,s[10005]=,l1=s1.size(),l2=s2.size(),l=max(l1,l2),w=0;

string ans="";

for(i=0;iw) w=x;//如果位數大於x,x替換成w

} for(int i=0;i<=w;i++) ans=char(s[i]+'0')+ans;//把結果轉換回string返回

return ans;

}int main()

{ string v1,v2;//高精度兩數

cin>>v1>>v2;//輸入

cout感謝大家的支援,下期再見

高精度計算(大數乘除法)

在高精度加減運算的基礎上實現,進行高精度數的乘法運算,首先要確定積的位數,設兩個數為,a,b la為a 的位數,lb為b的位數,兩個的乘積最少位數為la lb 1 若乘後,的這個最小位上有進製,則乘積位數變為la lb 進行高精度 的乘法時,需要計算被乘數與乘數的每位數字的乘積,其中a i b j ...

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

先貼乙個簡單的高精度除以單精度的 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表示除數,陣列res表示商 先用被除數a減去除數b得到差的位數k,同時商 1 再用被除數a減去若干個除數b 10 k 不夠...