shadow wolf’s blog
阿新 • • 發佈:2018-12-13
高精度加法
原理:
將數字分成陣列存入,逐位相加
原來int的要開很大的,如10000000000000000,或者有些long long都不夠,在char裡面只要17位
Q:為什麼?
A:因為原來是將一個數存入,現在分成字元存入陣列,進行加法運算
首先將讀入的字元存入int陣列
讀入資料1:
for(int i=1;i<=a[0];i++){
a[i]=a1[a[0]-i]-'0';
}
讀入資料2:
for(int j=1;j<=b[0];j++){
b[j]=b1[b[0]-j]-'0';
}
讀入之後
c陣列負責加法運算
lenc是c的長度
x是進位的多少,如果這個數小於10,除以10是0
都懂吧?
while(lenc<=e){
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
然後輸出:
for(int i=lenc;i>=1;i--){
printf("%d",c[i]);
}
整段程式碼:
#include<cstdio> #include<string> using namespace std; char a1[100],b1[100]; int a[100],b[100],c[100],x=0,e,lenc=1; int maxaaa(int a,int b){ if(a>b){ return a; }else return b; } int main(){ gets(a1); gets(b1); a[0]=strlen(a1); b[0]=strlen(b1); e=maxaaa(a[0],b[0]); for(int i=1;i<=a[0];i++){ a[i]=a1[a[0]-i]-'0'; } for(int j=1;j<=b[0];j++){ b[j]=b1[b[0]-j]-'0'; } while(lenc<=e){ c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]%=10; lenc++; } if(c[lenc]==0){ lenc--; } for(int i=lenc;i>=1;i--){ printf("%d",c[i]); } return 0; }