高精度加法 完全的函數封裝!
高精度計算是NOIP中常考常用的算法之一,某天我閑的DT,寫了個代碼極其冗長的高精度加法函數,方便大家直接調用。
#include <iostream> #include <string> using namespace std; char result[100]; void Highj(char a[],char b[]) { int x[100],y[100]; int i,l,la,lb; char temp[100]; for (i=0;i<99;i++){x[i]=0;y[i]=0;} //初始化 la=strlen(a); lb=strlen(b); //把char型數組 按正倒序 變成整型數組 if (la<=lb) { for (i=la-1;i>=0;i--) y[i]=a[la-1-i]-'0'; for (i=lb-1;i>=0;i--) x[i]=b[lb-1-i]-'0'; l=la; } else { for (i=la-1;i>=0;i--) x[i]=a[la-1-i]-'0'; for (i=lb-1;i>=0;i--) y[i]=b[lb-1-i]-'0'; l=lb; } //執行加法運算 for (i=0;i<l;i++) { x[i]=x[i]+y[i]; if (x[i]>=10) { x[i]-=10; x[i+1]+=1; } } //再把整型數組按照倒序轉換成char型數組 for (i=99;i>=0;i--) temp[99-i]=x[i]+'0'; //從不是0的一位開始輸出結果 for (i=0;i<=99;i++) { if (temp[i]>'0') { for(int j=i;j<=99;j++) result[j-i]=temp[j]; return; } } //如果沒有一位大於0 result[0]='0'; return; } int main() { char a[100],b[100]; cin>>a>>b; Highj(a,b); cout<<result<<endl; return 0; }
2011年9月14日 18:05
的确很冗长,不过还不错,都很正确~~收下了