【算法】高精四则运算

匿名 (未验证) 提交于 2019-12-03 00:40:02

高精度加法

    #include<iostream>     #include<cstring>     #include<cstdio>     using namespace std;     char a[200],b[200];     int a1[200],b1[200],c1[200];     int l1,l2,l3;     int main()     {         scanf("%s",a);         scanf("%s",b);         l1=strlen(a);         l2=strlen(b);         for(int i=0;i<=strlen(a)-1;i++)         a1[l1-i]=a[i]-48;         for(int i=0;i<=strlen(b)-1;i++)         b1[l2-i]=b[i]-48;         int k=0;         l3=1;         while(l3<=l1||l3<=l2)         {             c1[l3]=a1[l3]+b1[l3]+k;             k=c1[l3]/10;             c1[l3]%=10;             l3++;         }         c1[l3]=k;         if(c1[l3]==0)         l3--;         for(int i=l3;i>=1;i--)         cout<<c1[i];     }

高精度减法(只支持两个正整数)

    #include<iostream>     #include<cstring>     #include<cstdio>     using namespace std;     char a[200],b[200],n[200];     int a1[200],b1[200],c1[200];     int l1,l2,l3;     int main()     {         scanf("%s",a);         scanf("%s",b);         if(strlen(a)<strlen(b)||(strlen(a)==strlen(b)&&strcmp(a,b)<0))         {             strcpy(n,a);             strcpy(a,b);             strcpy(b,n);             cout<<"-";         }         l1=strlen(a);         l2=strlen(b);         for(int i=0;i<=strlen(a)-1;i++)         a1[l1-i]=a[i]-48;         for(int i=0;i<=strlen(b)-1;i++)         b1[l2-i]=b[i]-48;         l3=1;         while(l3<=l1||l3<=l2)         {             if(a1[l3]<b1[l3])             {                 a1[l3]+=10;                 a1[l3+1]--;             }             c1[l3]=a1[l3]-b1[l3];             l3++;         }         while((c1[l3]==0)&&l3>1)         l3--;         for(int i=l3;i>=1;i--)         cout<<c1[i];     }

高精度乘法

    #include<iostream>     #include<cstring>     #include<cstdio>     using namespace std;     char a[2002],b[2002];     int a1[2002],b1[2002],c1[4040];     int l1,l2,l3;     int k;     int main()     {         scanf("%s",a);         scanf("%s",b);         l1=strlen(a);         l2=strlen(b);         for(int i=0;i<=l1-1;i++)         a1[l1-i]=a[i]-48;         for(int i=0;i<=l2-1;i++)         b1[l2-i]=b[i]-48;         for(int i=1;i<=l1;i++)         {             k=0;             for(int j=1;j<=l2;j++)             {                 c1[i+j-1]=c1[i+j-1]+k+a1[i]*b1[j];                 k=c1[i+j-1]/10;                 c1[i+j-1]%=10;             }             c1[l2+i]=k;         }         l3=l1+l2;         while(l3>1&&c1[l3]==0)         l3--;         for(int i=l3;i>=1;i--)         cout<<c1[i];     }

高精度除法(高精除以高精)

    #include<iostream>     #include<cstdio>     #include<cstring>     using namespace std;     int a[200],b[200],c[200],tem[200];     void intt (int a[])     {         string s;         cin>>s;         a[0]=s.length();         for(int i=1;i<=a[0];i++)         a[i]=s[a[0]-i]-48;     }     void print(int a[])     {         if(a[0]==0)         {             cout<<0<<endl;             return;         }         for(int i=a[0];i>=1;i--)         cout<<a[i];         cout<<endl;     }     int compare(int a[],int b[])     {         if(a[0]>b[0])         return 1;         if(a[0]<b[0])         return -1;         for(int i=a[0];i>=1;i--)         {             if(a[i]>b[i])             return 1;             if(a[i]<b[i])             return -1;         }         return 0;     }     int charu(int b[],int tem[],int k)     {         for(int i=1;i<=b[0];i++)         tem[i+k-1]=b[i];         tem[0]=b[0]+k-1;     }     void jian(int a[],int b[])     {         int flag;         flag=compare(a,b);         if(flag==0)         {             a[0]=0;             return;         }         if(flag==1)         {             for(int i=1;i<=a[0];i++)             {                 if(a[i]<b[i])                 {                     a[i]+=10;                     a[i+1]-=1;                 }                 a[i]=a[i]-b[i];             }             while(a[0]>0&&a[a[0]]==0)             a[0]--;         }     }     void chufa(int a[],int b[],int c[])     {         c[0]=a[0]-b[0]+1;         for(int i=c[0];i>=1;i--)         {             memset(tem,0,sizeof(tem));             charu(b,tem,i);             while(compare(a,tem)>=0)             {                 c[i]++;                 jian(a,tem);             }         }         while(c[0]>0&&c[c[0]]==0)         c[0]--;     }     int main()     {         intt(a);         intt(b);         chufa(a,b,c);         print(a);         print(c);     }

高精度除法(高精除以低精)

    #include<iostream>     #include<cstdio>     #include<cstring>     using namespace std;     int a1[20001],b1[20001];     char a[20001];     int l1,l2,x=0,b;     int main()     {         scanf("%s",a);         l1=strlen(a);         cin>>b;         for(int i=0;i<=l1-1;i++)         a1[i+1]=a[i]-48;         l2=1;         for(int i=1;i<=l1;i++)         {             b1[i]=(10*x+a1[i])/b;             x=(x*10+a1[i])%b;         }         while(b1[l2]==0&&l2<l1)         l2++;         for(int i=l2;i<=l1;i++)         cout<<b1[i]; }

原文:https://www.cnblogs.com/BrokenString/p/9279542.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!