4種高精度

    xiaoxiao2021-03-25  104

    ~高精度,常用的輔助~一般做子函數用~

    1.加法

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<ctime> #include<cctype> using namespace std; int a[305],b[305],c[305],i,j,n,m,x,k; char s[305]; int main() { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>s; n=strlen(s); for(i=0;i<=n;++i) a[n-i]=s[i]-'0'; cin>>s; m=strlen(s); for(i=0;i<=m;++i) b[m-i]=s[i]-'0'; if(m>n) n=m; for(i=1;i<=n;++i) { x=a[i]+b[i]+x; c[i]=x%10; x=x/10; } if(x>0) { ++n; c[n]=x; } for(i=n;i>=1;--i) cout<<c[i]; return 0; }

    2.減法

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<ctime> #include<cctype> using namespace std; int a[305],b[305],c[305],i,j,n,m,x,k; char s[305],t[305]; int main() { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",s); n=strlen(s); for(i=0;i<=n;i++) a[n-i]=s[i]-'0'; scanf("%s",t); m=strlen(t); for(i=0;i<=m;i++) b[m-i]=t[i]-'0'; if(n<m || n==m && strcmp(s,t)<0) { printf("-"); for(i=1;i<=m;i++) swap(a[i],b[i]); swap(n,m); } for(i=1;i<=n;i++) { x=10+a[i]-b[i]; c[i]=x%10; a[i+1]=a[i+1]+x/10-1; } while(n>1 && c[n]==0) n--; for(i=n;i>=1;i--) printf("%d",c[i]); return 0; }

    3.乘法

    #include<iostream> #include<cstdio> #include<cmath> #include<cctype> #include<cstdlib> #include<string> #include<cstring> #include<ctime> #include<algorithm> using namespace std; int a[300],b[300],c[500],n,m,len; char s[300]; int main() { int i,j,k,x,y; //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>s; n=strlen(s); for(i=0;i<n;i++)a[n-i]=s[i]-'0'; cin>>s; m=strlen(s); for(i=0;i<m;i++)b[m-i]=s[i]-'0'; for(i=1;i<=n;i++) { x=0; for(j=1;j<=m;j++) { x=x+a[i]*b[j]+c[i+j-1]; c[i+j-1]=x % 10; x=x/10; }; c[i+m]=c[i+m]+x; } len=n+m; while(len>1 && c[len]==0) len--; for(i=len;i>0;i--) cout<<c[i]; return 0; }

    4.1.除法(int范围的)

    #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstdlib> #include<string> #include<cstring> #include<ctime> using namespace std; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int a[300],b[300],i,j,n,m,x; char s[300]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); cin>>s; n=strlen(s); for(i=0;i<n;i++) a[i]=s[i]-'0'; cin>>m; x=0; for (i=0;i<n;i++) { b[i]=(x*10+a[i])/m; x=(x*10+a[i]) % m; } j=1; while ((b[j]==0) && (j<n-1)) j++; for (i=j;i<n;i++) cout<<b[i]; printf("\n"); printf("%d\n",x); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-17675.html

    最新回复(0)