高精度基礎之加法

//模板:
#include<cstdio>
#include<cstring>
using namespace std;
struct sd {
    int lend,d[300]; //長度,存數字的數組
    sd(){memset(d,0,sizeof(d));}//初始化操作,清零
    //引入一個數與結構體內的數相加
    //const表示常數,&x表示傳入地址
    //如果寫成sd x傳入這個數就太大了,而且容易被改變
    sd operator + (const sd &x) const  { 
       sd c;//求和器
       int t=lend>x.lend?lend:x.lend; //取兩個數中最長的
       c.d[0]=0;
       for (int i=0;i<t;i++)
          {
             c.d[i]=c.d[i]+d[i]+x.d[i];
             c.d[i+1]=c.d[i]/10;
 //如果進位了,(因爲是倒序存入),後一個數初值先賦1,以後便在1的基礎上累加
             c.d[i]=c.d[i] % 10;//當前位的值
          }
       c.lend=t;   
       if (c.d[t]>0) c.lend++;//如果最高位進位了,長度加1
       return c;
    }
};
// <    set  map vector
sd readit()
{
   sd c;char st[300];
   scanf("%s",st);int j=0;
   for (int i=strlen(st)-1;i>=0;i--)//倒序讀入
      {
        c.d[j]=st[i]-48;j++; //記得邊倒序讀入邊轉化字符爲數字
      }
   c.lend=j;   //記錄長度
   return c;    
}
int main()
{
   sd a,b,c;
   a=readit();b=readit();   
   c=a+b;
   for (int i=c.lend-1;i>=0;i--)
      printf("%d",c.d[i]);
   printf("\n");   
   return 0;    
}

核心:
結構體,運算符重載,倒序存入

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