高精度加法

      模擬小學生手算,一位位相加,允許輸入數的最高位非零。

#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{ int i;
  char a[1234],b[1234];
  int c[1234];
  gets(a);
  gets(b);
  int la=strlen(a);
  int lb=strlen(b);
  int max=la>lb?la:lb;
  int k=abs(la-lb);
      if(la>lb) //b對齊a,左邊補零
      {for(i=lb-1;i>=0;i--)
 b[i+k]=b[i];
 for(i=0;i<k;i++)
 b[i]='0';}
      if(la<lb)//a對齊b,左邊補零
 {for(i=la-1;i>=0;i--)
 a[i+k]=a[i];
  for(i=0;i<k;i++)
 a[i]='0';}
 for(i=max-1;i>=0;i--)//一位位相加,放入c數組中
 c[i]=(a[i]-'0')+(b[i]-'0');
 for(i=max-1;i>=1;i--)//進位判斷和執行
 if(c[i]>=10)
 {c[i]-=10;c[i-1]++;}
for(i=0;c[i]==0;i++); //光標遍歷至非零處(忽略開頭的0)
 if(i==max)//如果結果全爲0,輸出一個0
 cout<<0;
 else      //從左起非零數起輸出
 while(i<max)
 cout<<c[i++];
 cout<<endl;
  return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章