#include"stdio.h" #include"iostream.h" char zad1[600],zad2[600],zad3[1002]; char mn[53][503]; int dll[11]; int n,h; char dzial; void format() { int i,j; for (i=0; zad3[i]>='0'; i++) zad1[i]=zad3[i]; zad1[i]=0; dzial=zad3[i]; j=i+1; for (; zad3[j]; j++) zad2[j-i-1]=zad3[j]; zad2[j-i-1]=0; } int dlug(char *co) { int i; for (i=0; co[i]; i++); return i; } int k,l,max_d; void dodaj(char* co1, char* co2, int ll) { k=dlug(co1); l=dlug(co2); max_d=k>l?k:l; int wynik=0,t; int przenies=0; int c1,c2; for (t=0; t<max_d; t++) { if (t>=k) c1=0; else c1=co1[k-t-1]-'0'; if (t>=l) c2=0; else c2=co2[l-t-1]-'0'; wynik=przenies+c1+c2; przenies=wynik/10; wynik=wynik%10; mn[ll][t]='0'+wynik; } if (przenies) mn[ll][t++]='1'; mn[ll][t]=0; }; void odejmij(char* co1, char* co2, int ll) { k=dlug(co1); l=dlug(co2); max_d=k>l?k:l; int wynik=0,t; int przenies=0; int c1,c2; for (t=0; t<max_d; t++) { if (t>=k) c1=0; else c1=co1[k-t-1]-'0'; if (t>=l) c2=0; else c2=co2[l-t-1]-'0'; wynik=przenies+c1-c2; if (wynik<0) {przenies=-1; wynik+=10;} else przenies=0; wynik=wynik%10; mn[ll][t]='0'+wynik; } while (mn[ll][t-1]=='0') { if (t>0) t--; else break; } if (t==0) { mn[ll][0]='0'; t++; }; mn[ll][t]=0; }; void wyswietl_d() { int o; if (k>l+1) max_d=k; else max_d=l+1; int p=dlug(mn[0]); if (p>max_d) max_d=p; o=max_d; for (; o>0; o--) { if (o>k) printf(" "); else printf("%c",zad1[k-o]); } printf("\n"); for (o=max_d; o>0; o--) { if (o>l) { if(o-l==1) printf("+"); else printf(" "); } else printf("%c",zad2[l-o]); } printf("\n"); for (o=max_d; o>0; o--) { printf("-"); } printf("\n"); for (o=max_d; o>=0; o--) { if (o>p) printf(" "); else if (mn[0][o])printf("%c",mn[0][o]); } printf("\n"); printf("\n"); } void wyswietl_o() { int o; if (k>l+1) max_d=k; else max_d=l+1; int p=dlug(mn[0]); if (p>max_d) max_d=p; o=max_d; for (; o>0; o--) { if (o>k) printf(" "); else printf("%c",zad1[k-o]); } printf("\n"); for (o=max_d; o>0; o--) { if (o>l) { if(o-l==1) printf("-"); else printf(" "); } else printf("%c",zad2[l-o]); } printf("\n"); for (o=max_d; o>0; o--) { printf("-"); } printf("\n"); for (o=max_d; o>=0; o--) { if (o>p) printf(" "); else if (mn[0][o]) printf("%c",mn[0][o]); } printf("\n"); printf("\n"); } void dodaj_p(char* co1, char* co2, int il_przes) { l=dlug(co2); max_d=l+il_przes; int wynik=0,t; int przenies=0; int c1,c2; for (t=il_przes; t<max_d; t++) { c1=co1[t]-'0'; c2=co2[t-il_przes]-'0'; wynik=przenies+c1+c2; przenies=wynik/10; wynik=wynik%10; co1[t]='0'+wynik; } if (przenies) co1[t++]+=1; }; void mnoz_c(char *co, int l_) { if (l_==0) { mn[0][0]='0'; mn[0][1]=0; dll[0]=1; } else { int reszta=0,wynik; int kk,pol=dlug(co); for (kk=0; kk<pol; kk++) { wynik=reszta+l_*(co[pol-kk-1]-'0'); reszta=wynik/10; wynik=wynik%10; mn[l_][kk]=wynik+'0'; }; if (reszta) mn[l_][kk++]=reszta+'0'; mn[l_][kk]=0; dll[l_]=kk; } } void odwroc() { char ty; for (int y=1; y<10; y++) { int zzz=dll[y]; for (int h=0; h<zzz/2; h++) { ty=mn[y][h]; mn[y][h]=mn[y][zzz-h-1]; mn[y][zzz-h-1]=ty; } } } void mnoz() { int pp,dl_2,dl_calk; dl_2=dlug(zad2); for (int pop=0; pop<1001; pop++) zad3[pop]='0'; zad3[1001]=0; for (pp=0; pp<10; pp++) mnoz_c(zad1,pp); for (pp=0; pp<dl_2; pp++) dodaj_p(zad3,mn[zad2[dl_2-pp-1]-'0'],pp); if (zad3[max_d]=='0') zad3[max_d]=0; else zad3[max_d+1]=0; dl_calk=dlug(zad3);//dl_2+dll[zad2[dl_2-pp-1]]; if (dl_calk<dlug(zad1)) dl_calk=dlug(zad1); if (dl_calk<dlug(zad2)+1) dl_calk=dlug(zad2)+1; odwroc(); int o; max_d=dl_calk;//dlug(zad3); k=dlug(zad1); l=dlug(zad2); o=max_d; for (; o>0; o--) { if (o>k) printf(" "); else printf("%c",zad1[k-o]); } printf("\n"); for (o=max_d; o>0; o--) { if (o>l) { if(o-l==1) printf("*"); else printf(" "); } else printf("%c",zad2[l-o]); } printf("\n"); if (dlug(zad2)!=1) { for (o=max_d-dlug(zad2)-1; o>0; o--) { printf(" "); } for (o=max_d; o>max_d-dlug(zad2)-1; o--) { printf("-"); } printf("\n"); for (pp=0; pp<dl_2; pp++) { int poz; for (poz=0; poz<dl_calk-pp-dlug(mn[zad2[dl_2-pp-1]-'0']); poz++) printf(" "); printf(mn[zad2[dl_2-pp-1]-'0']); printf("\n"); } } if (max_d==dlug(zad3)) for (o=max_d; o>0; o--) printf("-"); else {printf(" "); for (o=max_d-1; o>0; o--) printf("-");} printf("\n"); for (int bal=0; bal<max_d; bal++) if (zad3[max_d-bal-1]) printf("%c",zad3[max_d-bal-1]); else printf(" "); printf("\n"); if (h!=n-1) printf("\n"); } void wyswietl_m() { // printf(zad3); // niewywolywane } int main() { scanf("%d",&n); for (h=0; h<n; h++) { scanf("%s",zad3); format(); switch(dzial) { case '+' : dodaj(zad1,zad2,0); wyswietl_d(); break; case '-' : odejmij(zad1,zad2,0); wyswietl_o(); break; case '*' : mnoz(); wyswietl_m(); break; } } return 0; }