高精度加法
- #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];
- }
来源: http://www.bubuko.com/infodetail-2676578.html