|
发表于 2021-11-9 16:38:54
|
显示全部楼层
本帖最后由 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;
- }
复制代码 |
|