• 高精度模板


    就当是复习了。

    至于高精度除以高精度和高精度取模高精度,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
  • 相关阅读:
    java中Calendar类里面的月份是月份数减一。
    hdu oj
    存在重复元素
    杨辉三角
    删除链表的倒数第n个结点
    相交链表
    环形链表 II
    环形链表
    至少是其他数字两倍的最大数
    寻找数组的中心索引
  • 原文地址:https://www.cnblogs.com/yyys-/p/11832048.html
Copyright © 2020-2023  润新知