zoukankan      html  css  js  c++  java
  • 高精度模板

    高精加:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 
     5 #define N 1000
     6 
     7 using namespace std;
     8 
     9 int a[N],b[N],c[N];
    10 char as[N],bs[N];
    11 int al,bl,cl;;
    12 
    13 int main()
    14   {
    15       cin>>as;
    16       cin>>bs;
    17       al=strlen(as);
    18       bl=strlen(bs);
    19       for(int i=al-1;i>=0;i--)
    20         a[al-i]=as[i]-'0';
    21       for(int i=bl-1;i>=0;i--)
    22         b[bl-i]=bs[i]-'0';
    23       for(int i=1;i<=max(al,bl);i++)
    24         c[i]=a[i]+b[i];
    25       cl=max(al,bl);
    26       for(int i=1;i<=cl;i++)
    27         if(c[i]>=10)
    28           {
    29               c[i+1]+=1;
    30               c[i]%=10;
    31           }
    32     if(c[cl+1]!=0)
    33       cl++;
    34     for(int i=cl;i>=1;i--)
    35       printf("%d",c[i]);
    36       return 0;
    37   }

    高精减:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 
     5 #define N 1000
     6 
     7 using namespace std; 
     8 
     9 char as[N],bs[N],cs[N];
    10 int a[N],b[N],c[N];
    11 int al,bl,cl;
    12 
    13 void jiaohuan()
    14   {
    15       printf("-");
    16       int p=al;
    17       al=bl;
    18       bl=p;
    19       strcpy(cs,as);
    20       strcpy(as,bs);
    21       strcpy(bs,cs);
    22       memset(c,0,sizeof(c));
    23   }
    24 
    25 int main()
    26   {
    27       cin>>as;
    28       cin>>bs;
    29       al=strlen(as);
    30       bl=strlen(bs);
    31       if(bl>al||(al==bl&&strcmp(as,bs)<0))
    32         jiaohuan();
    33       for(int i=al-1;i>=0;i--)
    34         a[al-i]=as[i]-'0';
    35       for(int i=bl-1;i>=0;i--)
    36         b[bl-i]=bs[i]-'0';
    37       cl=max(al,bl);
    38       for(int i=1;i<=cl;i++)
    39         c[i]=a[i]-b[i];
    40       for(int i=1;i<=cl;i++)
    41         if(c[i]<0)
    42           {
    43               c[i]+=10;
    44               c[i+1]--;
    45           }
    46       if(c[cl]<=0)
    47         cl--;
    48       for(int i=cl;i>0;i--)
    49         if(c[i]>0)
    50           printf("%d",c[i]);
    51         else
    52           printf("0");
    53       return 0;
    54   }

    高精乘:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    
    #define N 500*500+10
    
    using namespace std;
    
    char as[N],bs[N],cs[N];
    int a[N],b[N],c[N];
    int al,bl,cl;
    
    int main()
      {
          cin>>as;
          cin>>bs;
          al=strlen(as);
          bl=strlen(bs);
          for(int i=al-1;i>=0;i--)
            a[al-i]=as[i]-'0';
          for(int i=bl-1;i>=0;i--)
            b[bl-i]=bs[i]-'0';
          for(int i=1;i<=al;i++)
            {
                int x=0;
                for(int j=1;j<=bl;j++)
                  {
                      c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
                      x=c[i+j-1]/10;
                      c[i+j-1]%=10;
                  }
            c[i+bl]=x;
            }
          cl=al+bl;
          while(c[cl]==0&&cl>1)
            cl--;
          for(int i=cl;i>0;i--)
            printf("%d",c[i]);
          return 0;
       } 

    高精除(高精除单精):

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 
     5 #define N 5000
     6 
     7 using namespace std;
     8 
     9 char as[N];
    10 int a[N],c[N];
    11 int al,bl,b,x;
    12 
    13 int main()
    14   {
    15       cin>>as;
    16       cin>>b;
    17       al=strlen(as);
    18       for(int i=0;i<al;i++)
    19         a[i+1]=as[i]-'0';
    20       for(int i=1;i<=al;i++)
    21         {
    22             c[i]=(x*10+a[i])/b;
    23             x=(x*10+a[i])%b;
    24         }
    25       bl=1;
    26       while(c[bl]==0&&bl<al)
    27         bl++;
    28       for(int i=bl;i<=al;i++)
    29         printf("%d",c[i]);
    30       return 0;
    31   }

     实数加法:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 char as[101],bs[101],cs[101];
     6 int a1[101],a2[101],b1[101],b2[101],c1[101],c2[101],t[101];
     7 int l11,l12,l21,l22,l,l1,l2,s;
     8 int main()
     9   {
    10       cin>>as>>bs;
    11       l1=strlen(as);
    12       l2=strlen(bs);
    13       for(int i=l1-1;i>=0;i--)
    14         as[i+1]=as[i];
    15       for(int i=l2-1;i>=0;i--)
    16         bs[i+1]=bs[i];
    17       int p=1;
    18       while(as[p]!='.')
    19         a1[p]=as[p]-'0',p++;
    20       l11=p-1;
    21       while(p<=l1)
    22         {
    23             a2[p-l11-1]=as[p]-'0';
    24             p++;
    25         }
    26       l12=l1-l11-1;
    27       p=1;
    28       while(bs[p]!='.')
    29         b1[p]=bs[p]-'0',p++;
    30       l21=p-1;
    31       while(p<=l2)
    32         {
    33             b2[p-l21-1]=bs[p]-'0';
    34             p++;
    35         }
    36       l22=l2-l21-1;
    37       for(int i=1;i<=l11;i++)
    38         t[l11-i+1]=a1[i];
    39       for(int i=1;i<=l11;i++)
    40         a1[i]=t[i];
    41       for(int i=1;i<=l21;i++)
    42         t[l21-i+1]=b1[i];
    43       for(int i=1;i<=l21;i++)
    44         b1[i]=t[i];
    45       l=max(l11,l21);
    46       for(int i=1;i<=l;i++)
    47         c1[i]=a1[i]+b1[i];
    48       for(int i=1;i<=l;i++)
    49         if(c1[i]>9)
    50           {
    51               c1[i]%=10;
    52               c1[i+1]++;
    53           }
    54     if(c1[l+1]!=0) l++;
    55     s=max(l12,l22);
    56     for(int i=1;i<=s;i++)
    57       c2[i]=a2[i]+b2[i];
    58     for(int i=s;i>=1;i--)
    59       if(c2[i]>9)
    60         {
    61             c2[i]%=10;
    62             c2[i-1]++;
    63         }
    64     if(c2[0]!=0)
    65       c1[1]++;
    66     for(int i=l;i>=1;i--)
    67       printf("%d",c1[i]);
    68     printf(".");
    69     for(int i=1;i<=s;i++)
    70       printf("%d",c2[i]);
    71       return 0;
    72   }
  • 相关阅读:
    第1章 1.4计算机网络概述--数据包和数据帧
    第1章 1.3计算机网络概述--规划IP地址介绍MAC地址
    sql生成随机字符串
    bootstrap手风琴效果
    C#-java RSA加密解密
    正则表达式验证手机号 身份证号 银行卡号 姓名输入
    微服务在微信后台的架构实践
    react学习
    datatables .fnDraw is not a function
    给当前页或者跳转后页面的导航栏添加选中样式
  • 原文地址:https://www.cnblogs.com/yuemo/p/5558988.html
Copyright © 2011-2022 走看看