高精度实现
#加法
#include<bits/stdc++.h> using namespace std; int i,x; int main(){ char a1[600],b1[600]; int a[600],b[600],c[600]; int a1_len,b1_len,lenc; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>a1>>b1; a1_len=strlen(a1); b1_len=strlen(b1); for(i=0;i<a1_len;i++){ a[a1_len-i]=a1[i]-48; } for(i=0;i<b1_len;i++){ b[b1_len-i]=b1[i]-48; } lenc=1; while(lenc<=a1_len||lenc<=b1_len){ c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]%10; lenc++; } c[lenc]=x; if(c[lenc]==0){ lenc--; } for(i=lenc;i>=1;i--){ cout<<c[i]; } return 0; }
#乘法
#include<bits/stdc++.h> using namespace std; char a[3000]; char b[3000]; int x[3000]; int y[3000]; int m[3000]; int i; int j; int len; int n; int main(){ cin>>a>>b; int lena=strlen(a); int lenb=strlen(b); for(i=1;i<=lena;i++) x[i]=a[lena-i]-48; for(i=1;i<=lenb;i++) y[i]=b[lenb-i]-48; for(i=1;i<=lena;i++) { for (j=1; j <=lenb; j++) m[i+j-1]+=x[i]*y[j]; } for(int i=0;i<lena+lenb;i++){ if(m[i]>9) { m[i+1]+=m[i]/10; m[i]%=10; } } len=lena+lenb; while(m[len]==0&&len>1)len--; for(i=len;i>=1;i--)cout<<m[i]; return 0; }
就注意一下倒数第三行,首位去零的操作
咱们山顶见。