#include #include #include typedef char suplong[512]; suplong mR[512]; //template inline T max( T a, T b ) { return( a > b ) ? a : b ) }; //template inline T min( T a, T b ) { return( a < b ) ? a : b ) }; #define max( x, y ) ( (x) > (y) ? (x) : (y) ) void reverse(char *s) { int i,l=strlen(s); char c; for(i=0;i<(l>>1);i++) { c=s[i]; s[i]=s[l-i-1]; s[l-i-1]=c; } } int chartoint(char c) { if((c>='0')&&(c<='9')) return(c-'0'); else return 0; } char inttochr( int x ) { if( (x >= 0 ) && ( x <=9 ) ) return( '0' + x ); else return '0'; } void strmul1( char *a, int x, char *wyn ) { // cout << "a = " << a << "\n"; // cout << "b = " << b << "\n"; int i, p, q = 0; for( i = 0; i < (int)strlen( a ); i++ ) { p = x * chartoint( a[i] ) + q; wyn[i] = inttochr( p % 10 ); q = p / 10; } while( q ) { wyn[i++] = inttochr( q % 10 ); q = q / 10; } wyn[i] = '\0'; } void dopisz_zera( char *x, int ile ) { int i, lx = strlen( x ); for( i = lx; i 0; f-- ) w1[f] = w1[f-1]; // w1[0] = '0'; reverse( w1 ); usun_zera( w1 ); reverse( w1 ); if( strlen( w1 ) == 0 ) strcpy( w1, "0" ); mR[i] = w1; int len = strlen( w1 ); int zera; for( zera = len; zera < len + i; zera++ ) w1[zera] = '0'; w1[zera] = 0; stradd( w1, pom, pom1 ); strcpy( pom, pom1 ); } NI = i; reverse( a ); reverse( b ); strcpy( wyn, pom ); } void strsub(char *a,char *line,char *wyn) { int w,i,carry=0,ll=strlen(line),lw=strlen(a); int x=0,y=0, lm; if( ll < lw ) lm = ll; else lm = lw; strcpy(wyn, a); reverse(wyn); reverse(line); for(i=0;(i> n; static char buf[2000], a[2000], b[2000], r[2000]; int i; for( i = 0; i < n; i++ ) { cin >> buf; // gets( buf ); int j, len = strlen( buf ); // cout << "n = " << n << "\n"; // cout << "Strlen = " << len << "\n"; char sign; for( j = 0; j < len; j++ ) { if( buf[j] == '+' ) { break; } if( buf[j] == '-' ) { break; } if( buf[j] == '*' ) { break; } } sign = buf[j]; memcpy( a, buf, j ); a[j] = 0; memcpy( b, buf+j+1, len - j -1 ); b[len-1-j] = 0; if( sign == '+' || sign == '-' ) { if( sign == '+' ) stradd( a, b, r ); else strsub( a, b, r ); int alignTo = max(max( strlen( a ), strlen(b) + 1 ), strlen( r ) ); alignPrint( alignTo, a ); alignPrint( alignTo, b, sign ); kreski( alignTo, alignTo ); alignPrint( alignTo, r ); } else { strcpy( r, "0" ); strmul( a, b, r ); int kres = max( strlen( a ), strlen(b) + 1 ); int alignTo = max( kres, strlen(r )); // cout << "kes: " << kres << "\n"; alignPrint( alignTo, a ); alignPrint( alignTo, b, sign ); kreski( alignTo, kres ); if( NI > 1 ) { int i =0; for( i = 0; i < NI; i++ ) { alignPrint( alignTo - i, mR[i] ); } kreski( alignTo, alignTo ); } alignPrint( alignTo, r ); } printf( "\n" ); } /*int n; suplong wej; scanf("%d\n",&n); while(n--) { gets(wej); char *zn; zn=strstr(wej,"+"); if(zn!=NULL) { *zn=0; wyn=stradd(wej,zn+1); } else { zn=strstr(wej,"-"); if(zn!=NULL) { } else { zn=strstr(wej,"*"); if(zn!=NULL) { } } } } */ return 0; }