1 int work(int o,char *O,int I) { // 手动开根,试商 2 char c, *D=O ; 3 if(o>0) { 4 for(l=0;D[l];D[l++]-=10) { 5 D[l++]-=120; 6 D[l]-=110; 7 while(!work(0,O,l)) D[l]+=20; 8 putchar((D[l]+1032)/20); 9 }10 putchar('\n');11 }12 else {13 c=o+(D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;14 D[I]+=I<0 ? 0 : !(o=work(c/10,O,I-1))*((c+999)%10-(D[I]+92)%10);15 }16 return o;17 }18 int main() {19 char s[205];s[0]='0';20 scanf("%s",s+1);21 if(strlen(s)%2 == 1) work(2,s+1,0);22 else work(2,s,0);23 }