1. 程式人生 > 實用技巧 >~|C++的高精度|[一]~

~|C++的高精度|[一]~

 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部分程式碼略過,詳情請翻到