高精度加法
原理:
將數字分成數組存入,逐位相加
原來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;
}