基础算法 —— 高精度计算
生活随笔
收集整理的這篇文章主要介紹了
基础算法 —— 高精度计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概述】
利用計算機進行數值計算,有時會遇到這樣的問題:有些計算要求精度高,希望計算的尾數可達到幾十甚至幾百位,雖然計算機本身精度足夠高,但受硬件限制,往往達不到實際問題所要求的精度,因此我們用程序設計的方法去實現這樣的高精度計算。
除 C++ 高精算法之外,還可以選用 Java 大數類來處理高精問題,而且由于 Python 沒有數據類型的限制,因此也可用 Python 來解決高精問題。
【要處理的問題】
1.數據接收與存儲:當數據很長時,可以用字符串方式輸入,利用字符串函數和運算操作,將每一位取出存入數組中。
void input() {string s;cin>>s;//讀入字符串a[0]=s.length();//用a[0]存儲字符串s的位數for(i=1;i<=a[0];i++)//將數串轉為數組a,并倒序存儲a[i]=s[a[0]-i]-'0'; }2.位數的確定:接收時使用字符串,所以它的位數等于字符串的長度。
3.補零問題:當兩個操作數長度不一樣時,需要進行補零。
void fixed() {string str1,str2;int len1,len2;int i;cin>>str1;//讀入字符串1cin>>str2;//讀入字符串2len1=str1.length();//求字符串長度1len2=str2.length();//求字符串長度2if(len1<len2)//當字符串1<字符串2時,對字符串1補零for(i=1;i<=len2-len1;i++)str1="0"+str1;else//當字符串1>字符串2時,對字符串1補零for(i=1;i<=len1-len2;i++)str2="0"+str2; }4.進位、借位處理
加法:c[i]=a[i]+b[i];
? ? ??????if(c[i]>=10)
? ? ????? { c[i]%=10;++c[i+1]; }
減法:if(a[i]<b[i])
??????????{ --a[i+1];a[i]+=10; }
??????????c[i]=a[i]-b[i];
乘法:c[i+j-1]=a[i]*b[i]+x+c[i+j-1];
???????????x=c[i+j-1]/10;
???????????c[i+j-1]%=10;
5.商和余數的處理:視被除數、除數的位數情況進行處理
【分類】
【例題】
1.入門模版題
2.混合題
3.Java 與 Python
總結
以上是生活随笔為你收集整理的基础算法 —— 高精度计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 晶晶赴约会(信息学奥赛一本通-T1049
- 下一篇: 信息学奥赛一本通C++语言——1028: