*高精度专题

xiaoxiao2021-02-28  94

今天是2017/7/11,DCDCBigBig的第二十五篇博文

看了一下U盘,发现还有好多东西,就把里面的模板什么的都发上来吧。。。

高精度计算

加法

#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #define u(n) n-'0' using namespace std; int len,len1,len2,a[100001],b[100001],c[100001]; char a1[100001],b1[100001]; void add(int a[],int b[]){ int p=0; for(int i=1;i<=len;i++){ c[i]=(a[i]+b[i]+p)%10; p=(a[i]+b[i]+p)/10; } if(p)c[++len]=p; } int main(){ scanf("%s%s",a1,b1); len1=(int)strlen(a1); len2=(int)strlen(b1); for(int i=0;i<len1;i++){ a[len1-i]=u(a1[i]); } for(int i=0;i<len2;i++){ b[len2-i]=u(b1[i]); } len=max(len1,len2); add(a,b); for(int i=len;i>=1;i--){ printf("%d",c[i]); } return 0; }

乘法

#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #define u(n) n-'0' using namespace std; int a[100001],b[100001],c[100001]; char a1[100001],b1[100001]; void mutiply(int a[],int b[]){ int p=0; memset(c,0,sizeof(c)); for(int i=1;i<=a[0];i++){ for(int j=1;j<=b[0];j++){ c[i+j-1]+=a[i]*b[j]; } } c[0]=a[0]+b[0]-1; for(int i=1;i<=c[0];i++){ c[i]+=p; p=c[i]/10; c[i]%=10; } while(p){ c[++c[0]]=p%10; p/=10; } } int main(){ scanf("%s%s",a1,b1); a[0]=(int)strlen(a1); b[0]=(int)strlen(b1); for(int i=0;i<a[0];i++){ a[a[0]-i]=u(a1[i]); } for(int i=0;i<b[0];i++){ b[b[0]-i]=u(b1[i]); } mutiply(a,b); for(int i=c[0];i>=1;i--){ printf("%d",c[i]); } return 0; }

减法

#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #define u(n) n-'0' using namespace std; int a[100001],b[100001],c[100001]; char a1[100001],b1[100001]; int check(int a[],int b[]){ if(a[0]>b[0])return true; if(a[0]<b[0])return false; for(int i=a[0];i>=1;i--){ if(a[i]!=b[i])return a[i]>b[i]; } return true; } void minu(int a[],int b[]){ bool ch=check(a,b); if(!ch){ putchar('-'); swap(a,b); } for(int i=1;i<=a[0];i++){ if(a[i]>=b[i])c[i]=a[i]-b[i]; else{ a[i]+=10; a[i+1]--; c[i]=a[i]-b[i]; } } c[0]=a[0]; while(c[0]-1&&c[c[0]]==0)c[0]--; } int main(){ scanf("%s%s",a1,b1); a[0]=(int)strlen(a1); b[0]=(int)strlen(b1); for(int i=0;i<a[0];i++){ a[a[0]-i]=u(a1[i]); } for(int i=0;i<b[0];i++){ b[b[0]-i]=u(b1[i]); } minu(a,b); for(int i=c[0];i>=1;i--){ printf("%d",c[i]); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-58752.html

最新回复(0)