~|C++的高精度|[一]~
阿新 • • 發佈:2020-12-10
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int main(){ 6 char a1[100],b1[100]; 7 int a[100],b[100],c[100],lena,lenb,lenc,i,x; 8 //設定陣列變數 9 memset(a,0,sizeof(a)); 10 memset(b,0,sizeof(b)); 11 memset(c,0,sizeof(c)); 12 //陣列初始化13 gets(a1); 14 gets(b1); 15 //輸入陣列 16 lena=strlen(a1); 17 lenb=strlen(b1); 18 //計算長度 19 for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; 20 for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; 21 //將char型別a1和b1轉化為int型別a和b 22 lenc=1; 23 //結果的長度 24 x=0; 25 //餘數 26 while(lenc<=lena||lenc<=lenb){ 27 c[lenc]=a[lenc]+b[lenc]+x; 28 //計算 29 x=c[lenc]/10; 30 //計算餘數 31 c[lenc]%=10; 32 //計算保留上一位數 33 lenc++; 34 //長度累加 35 } 36 //計算加法 37 c[lenc]=x; 38 //如果是低位數計算完後高一位,則添上 39 if(c[lenc]==0) lenc--; 40//如果不是,再刪去 41 for(i=lenc;i>=1;i--) cout<<c[i]; 42 //倒序輸出 43 cout<<endl; 44 return 0; 45 }
如上文就是C++的高精度加法(蒟蒻程式),首先我們先看看什麼是高精度:
高精度就是運用字串或陣列輸入,再把字串轉化為陣列進行計算輸出的演算法(個人理解,有錯必糾)。
這個程式分為三部分——|輸入 運算 輸出|
首先是輸入,我這裡用的是字串:
1 void init(int a[]){ 2 string s; 3 cin>>s;//讀入字串,也可以用get() 4 a[0]=s.length();//獲得字串長度,存入a[0]裡面 5 for(int i=1;i<=a[0];i++) 6 a[i]=s[a[0]-i]-48;//轉換為陣列 7 }//還可以直接迴圈加陣列輸入(蒟蒻一筆帶過)
再是運算:
1 int c[100]; 2 void add(int a[],int b[]){ 3 int i=1,x=0; 4 while((i<=lena)||(i<=lenb)){//lena和lenb分別表示陣列a和陣列b的長度 5 c[i]=a[i]+b[i]+x;//計算a+b+進位數 6 x=c[i]/10;//計算進位數 7 c[i]%=10;//計算剩下的一位數存到陣列c 8 i++; 9 } 10 }
最後是輸出(倒序輸出):(o部分程式碼略過,詳情請翻到