高精度模板

就当是复习了。

至于高精度除以高精度和高精度取模高精度,csp不会那么变态吧。。

struct bg{
    int w[1005];
};
//存的时候倒着存,输的时候倒着输 
for(int i=1;i<=len1;i++)a.w[i]=s1[len1-i]-'0';
for(int i=c.w[0];i>=1;i--)printf("%d",c.w[i]);

bg jia(bg a,bg b)
{
    bg c;
    if(a.w[0]>b.w[0])c.w[0]=a.w[0]+1;
    else c.w[0]=b.w[0]+1;
    for(int i=1;i<=c.w[0];++i)c.w[i]=0;
    for(int i=1;i<=c.w[0]-1;++i)
    {
        c.w[i]=(a.w[i]+b.w[i])%10;
        c.w[i+1]+=(a.w[i]+b.w[i])/10;
    }
    while(c.w[0]>1&&c.w[c.w[0]]==0)c.w[0]--;
    return c;
}
bg jian(bg a,bg b) 
{
    bg c;
    c.w[0]=a.w[0];
    for(int i=1;i<=c.w[0];++i)c.w[i]=0;
    for(int i=1;i<=c.w[0];++i)
    {
        if(b.w[i]>a.w[i])
        {
            a.w[i+1]--;
            a.w[i]+=10;
        }
        c.w[i]=a.w[i]-b.w[i];
    }
    while(c.w[0]>1&&c.w[c.w[0]]==0)c.w[0]--;
    return c;
}
//高精乘低精 
bg mul(bg a,int b)
{
    for(int i=1;i<=a.w[0];++i)
      a.w[i]*=k;
    for(int i=1;i<=a.w[0];++i)
    {
        a.w[i+1]+=a.w[i]/10;
        a.w[i]%=10;
    }
    int j=a.w[0];
    while(a.w[j]>9)
    {
        a.w[j+1]+=a.w[j]/10;
        a.w[j]%=10;
    }
    a.w[0]=j;
    while(a.w[a.w[0]+1]!=0)a.w[0]++;
    return a;
}
//高精乘高精
bg mull(bg a,bg b)
{
    bg c;
    c.w[0]=a.w[0]+b.w[0];
    for(int i=1;i<=c.w[0];++i)c.w[i]=0;
    for(int i=1;i<=a.w[0];++i)
    for(int j=1;j<=b.w[0];++j)
    {
        c.w[i+j-1]=a.w[i]*b.w[j]%10;
        c.w[i+j]+=(a.w[i]*b.w[j])/10;
    }
    while(c.w[c.w[0]+1]!=0)c.w[0]++;
    while(c.w[0]>1&&c.w[c.w[0]]==0)c.w[0]--;
    return c;
}
//高精乘除低精 
bg chu(bg a,int b)
{
    bg c;
    int x=0;
    c.w[0]=a.w[0];
    for(int i=a.w[0];i>=1;--i)
    {
        c.w[i]=a.w[i]/b;
        a.w[i-1]+=(a.w[i]%b)*10;
    }
    while(c.w[0]>1&&c.w[c.w[0]]==0)c.w[0]--;
    return c;
}
//高精取模单精
int mod(string a,int b)//高精度a除以单精度b  
{  
    int d=0;  
    for(int i=1;i<=a.w[0];++i)d=(d*10+a.w[i])%b;  
    return d;
}
//strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
if(a.w[0]>b.w[0]||a.w[0]==b.w[0]&&strcmp(s1,s2)==1)c=jian(a,b);
else if(a.w[0]<b.w[0]||a.w[0]==b.w[0]&&strcmp(s1,s2)==-1){c=jian(b,a);printf("-");}
else printf("0");
View Code
原文地址:https://www.cnblogs.com/yyys-/p/11832048.html