高精度模板

来源:互联网 发布:js判断值不等于0 编辑:程序博客网 时间:2024/06/07 02:02

有些题要高精度,又不想写,又不想抄别人的代码,所以就抄自己的代码。

代码:

struct Node{int v[2010],l;};Node operator * (Node a,Node b){    Node c;c.l=a.l+b.l-1;    memset(c.v,0,sizeof(c.v));    for(int i=1;i<=a.l;i++)    for(int j=1;j<=b.l;j++)    c.v[i+j-1]+=a.v[i]*b.v[j];    for(int i=1;i<=c.l;i++)c.v[i+1]+=c.v[i]/10,c.v[i]%=10;    while(c.v[c.l+1])    {        c.l++;        c.v[c.l+1]+=c.v[c.l]/10;        c.v[c.l]%=10;    }    return c;}Node operator + (Node a,Node b){    a.l=max(a.l,b.l);    for(int i=1;i<=a.l;i++)a.v[i]+=b.v[i];    for(int i=1;i<=a.l;i++)a.v[i+1]+=a.v[i]/10,a.v[i]%=10;    while(a.v[a.l+1])    {        a.l++;        a.v[a.l+1]+=a.v[a.l]/10;        a.v[a.l]%=10;    }    return a;}Node operator - (Node a,Node b){    for(int i=1;i<=a.l;i++)a.v[i]-=b.v[i];    for(int i=1;i<=a.l;i++)    if(a.v[i]<0)a.v[i]+=10,a.v[i+1]--;    while(!a.v[a.l]&&a.l>1)a.l--;    return a;}void print(Node ans){for(int i=ans.l;i;i--)printf("%d",ans.v[i]);puts("");}
原创粉丝点击