高精度篇————
乘除法咳咳,最近一直在研究該怎麼講接下來的高精度
先說另一件事
家長的一位朋友說,高精度加法可以改進
如果在化字元為數字時把加法做了
可以省三個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 不夠...