c++ 普通高精除高精

时间:2022-07-23 20:33:48

//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;
}