//codevs3118 高精度练习之除法
//打出了高精除高精,内心有点小激动。
//还记得已开始学的时候非常难打
#include<cstdio> #include<cstring> char s1[600],s2[600]; int a1[600],a2[600],a3[600],a4[600],len1,len2,len3,i,j; int bi(int a3[],int a4[]) { if(a3[0]<a4[0]) return 0; if(a3[0]>a4[0]) return 1; for(int i=a3[0];i>0;i--) { if(a3[i]<a4[i]) return 0; if(a3[i]>a4[i]) return 1; } return 1; } int jian(int a3[],int a4[]) { for(int i=1;i<=a3[0];i++) { if(a3[i]<a4[i]) { a3[i]+=10; a3[i+1]--; } a3[i]-=a4[i]; } for(;a3[a3[0]]==0&&a3[0]>1;a3[0]--); } int main() { scanf("%s",s1); scanf("%s",s2); len1=strlen(s1); len2=strlen(s2); for(i=0;i<len1;i++) a1[len1-i]=s1[i]-'0'; for(i=0;i<len2;i++) a2[len2-i]=s2[i]-'0'; a1[0]=len1; a2[0]=len2; a4[0]=a1[0]-a2[0]+1; for(i=a4[0];i>0;i--) { memset(a3,0,sizeof(a3)); for(j=1;j<=a2[0];j++) a3[j+i-1]=a2[j]; a3[0]=a2[0]+i-1; for(;bi(a1,a3);) { a4[i]++; jian(a1,a3); } } for(;a4[a4[0]]==0&&a4[0]>1;a4[0]--); for(i=a4[0];i>0;i--) printf("%d",a4[i]); return 0; }
|
请发表评论