/* AC 17/18 * TPC1 Ex1 */ #include // converter unsigned long long (64 bits s/sinal) para a // representacao em dois unsigned int (32 bits s/sinal cada) void ULL2myint( unsigned n[2], unsigned long long num ) { n[0] = num & 0xffffffff; n[1] = (num>>32) & 0xffffffff; } // converter representacao de 64bits em dois unsigned int // para o tipo unsigned long long (64 bits s/sinal) unsigned long long myint2ULL( unsigned n[2] ) { unsigned long long num = n[1]; return (num<<32) + n[0]; } void soma64( unsigned n1[2], unsigned n2[2] ) // n1 = n1 + n2 { n1[0] = n1[0] + n2[0]; unsigned carry = (n1[0]1 ) { soma64(n1, oldn1 ); n2 = n2-1; } } int main( ) { unsigned long long x; unsigned long long y; unsigned z; unsigned n1[2]; unsigned n2[2]; scanf("%llu", &x); scanf("%llu", &y); scanf("%u", &z); ULL2myint( n1, x ); ULL2myint( n2, y ); printf( "soma pelo C: %llu\n", x+y ); soma64( n1, n2 ); // n1 = n1 + n2 unsigned long long result = myint2ULL( n1 ); printf( "soma por soma64: %llu\n", result ); printf( "multiplicacao pelo C: %llu\n", x*z ); ULL2myint( n1, x ); mul64( n1, z ); result = myint2ULL( n1 ); printf( "multiplicacao por mul64: %llu\n", result ); return 0; } /***************************************************************************/ /* AC 17/18 * TPC1 Ex2 */ #include void printInt( int val ) { char s[100]; // 100 pelo seguro para int com muitos bits, mas na realidade // um int de 32 bits em base 10 nao tem mais de 10 algarismos if ( val == 0 ) { putchar('0'); return; } if ( val<0 ) { putchar('-'); val = -val; } int i = 0; while ( val>0 ) { // obtem os varios algarismos int res = val%10; val = val/10; s[i++] = res+'0'; // passa de 0 para '0' (char), etc... } for ( i--; i>=0; i-- ) // escreve de tras para a frente putchar( s[i] ); } int main( int argc, char *argv[] ) { int x; scanf( "%d", &x ); printInt( x ); putchar('\n'); return 0; }