本帖最后由 jhq999 于 2021-11-9 16:59 编辑
我这个思路,不知道有多少BUG ,目前知道一个,就是减法时数位相同前面小于后面,我懒得调换了。int DivStr(char* inch,char* valch1,char* valch2,char *sg);
int Bigoperation(char* valch1,char* valch2,char sg,char* valch3);
int main()
{
char invalch[64]={0},valch[3][64]={0},sg=0;
int i=0,j=0,sgd=0;
scanf("%s",invalch);
if(!(sgd=DivStr(invalch,valch[0],valch[1],&sg)))return 0;
if(sgd)
{
if (-1==sgd)
{
if(Bigoperation(valch[1],valch[0],sg,valch[2]))
{
if('-'==sg)printf("-");
while (valch[2][++i]);
for (; i>=0; i--)
{
printf("%c",valch[2][i]);
}
}
}
else if (1==sgd)
{
if(Bigoperation(valch[0],valch[1],sg,valch[2]))
{
while (valch[2][++i]);
for (; i>=0; i--)
{
printf("%c",valch[2][i]);
}
}
}
}
return 0;
}
int Bigoperation(char* valch1,char* valch2,char sg,char* valch3)
{
int i=0,j=0,k=0;
if ('+'==sg)
{
for (i = 0,j=0;valch1[i]||valch2[j]; i++,j++)
{
if ('\0'==valch1[i])
{
i--;
}
if ('\0'==valch2[j])
{
j--;
}
if (i==j)
{
valch3[i]+=valch1[i]+valch2[j]-'0';
}
else if (i>j)
{
valch3[i]+=valch1[i];
}
else
{
valch3[j]+=valch2[j];
}
int k=i;
if (k<j)k=j;
if (valch3[k]>'9')
{
valch3[k]-=0xa;
valch3[k+1]++;
}
}
i=i>j?i:j;
while(valch3[i])i++;
i--;
if (valch3[i]>'9')
{
valch3[i]-=0xa;
}
else if(valch3[i]<'0')
{
valch3[i]+='0';
}
return 1;
}
if ('-'==sg)
{
for (i = 0,j=0;valch1[i]||valch2[j]; i++,j++)
{
if ('\0'==valch1[i])
{
i--;
}
if ('\0'==valch2[j])
{
j--;
}
if (i==j)
{
valch3[i]+=valch1[i]-valch2[j]+'0';
}
else if (i>j)
{
valch3[i]+=valch1[i];
}
else
{
valch3[j]+=valch2[j];
}
k=i;
if (k<j)k=j;
if (valch3[k]<'0')
{
valch3[k]=0x3a-'0'+valch3[k];
valch3[k+1]--;
}
}
if (valch3[k]=='0')
{
valch3[k]='\0';
}
return 1;
}
return 0;
}
int DivStr(char* inch,char* valch1,char* valch2,char *sg)
{
int i=0,j=0,sgd=1;
while ('+'!=inch[j]&&'-'!=inch[j])j++;
for (i = 0; i < j; i++)
{
valch1[j-1-i]=inch[i];
if ('0'>inch[i]||'9'<inch[i])
{
return 0;
}
}
*sg=inch[i];
sgd=i;
inch[i]='\0';
j=i+1;
while (inch[j])j++;
if ((sgd-1)<(j-sgd))sgd=-1;//就是这里
else
sgd=1;
for (i=0,j--; inch[j]; j--,i++)
{
valch2[i]=inch[j];
if ('0'>inch[j]||'9'<inch[j])
{
return 0;
}
}
return sgd;
}
|