#include #include #include #include const long MAXN = 1200; struct LongInt{ char tab[MAXN]; int num; }; void drukuj(LongInt &A) { int i; for (i=MAXN-1; i>=0 && A.tab[i]==0; i--); if (i<0) printf("0"); else for (;i>=0;i--) printf("%c",A.tab[i]+'0'); } void zeruj(LongInt &A) { for (int i=MAXN-1; i>=0; i--) A.tab[i]=0; A.num=0; } int dlug(LongInt &A) { int i; for (i=MAXN-1; i>=0 && A.tab[i]==0; i--); return(i>0?i+1:1); } LongInt &dodaj(LongInt &A, LongInt &B) { LongInt *C = new LongInt; zeruj(*C); char p=0; for (int i=0; itab[i]=A.tab[i]+B.tab[i]+p; p=0; if (C->tab[i]>9) { p=C->tab[i]/10; C->tab[i] %=10;} } return *C; } LongInt &odejmij(LongInt A, LongInt B) { LongInt *C = new LongInt; zeruj(*C); char p=0; for (int i=0; itab[i]=A.tab[i]-B.tab[i]+p; } return *C; } int main() { long int N; scanf("%ld\n",&N); for(long int L=0; Llb+1) z=lc; else z=lb+1; break; case('-') : C=odejmij(A,B); if (la>lb+1) z=la; else z=lb+1; lc=dlug(C); break; case('*') : for ( i=0; i<10; i++) zeruj(D[i]); int j; ld[0]=1; for (i=1; i<10; i++) { D[i]=dodaj(D[i-1],A); ld[i]=dlug(D[i]); } for (i=0; ilb+1) z=la; else z=lb+1; if (lc>z) z=lc; break; } for (i=0; i1) { int ldd; int cc=la; if (lb+1>cc) cc=lb; for (i=0; ildd) ldd=lc; for (i=0; iaa) aa=lc; for (i=0; i