Cod sursa(job #2786404)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 20 octombrie 2021 21:26:08
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#define NC 10000

struct hugeNumber {
    char cif[NC];
    int ncf;
};

hugeNumber ans;

void init( hugeNumber& v1, int a ) {
    v1.ncf = 0;
    while ( a > 0 ) {
        v1.cif[v1.ncf ++] = a % 10;
        a /= 10;
    }
}

void prodScalar( hugeNumber& v1, const int scalar ) {
    int t, i;
    t = i = 0;
    while ( i < v1.ncf || t > 0 ) {
        t = t + v1.cif[i] * scalar;
        v1.cif[i] = t % 10;
        t /= 10;
        i ++;
    }
    if ( i > v1.ncf )
        v1.ncf = i;
}

void afis( const hugeNumber& v1, FILE *fout ) {
    for ( int i = v1.ncf - 1; i >= 0; i -- )
        fputc( v1.cif[i] + '0', fout );
    fputc( '\n', fout );
}

int main() {
    FILE *fin, *fout;
    int n;

    fin = fopen( "patrate2.in", "r" );
    fscanf( fin, "%d", &n );
    fclose( fin );

    init( ans, 1 );
    for ( int i = 2; i <= n; i ++ )
        prodScalar( ans, i );
    int p = 1 << 27;
    for ( int i = 0; i < n * n / p; i ++ )
        prodScalar( ans, p );
    for ( int i = 0; i < n * n % p; i ++ )
        prodScalar( ans, 2 );

    fout = fopen( "patrate2.out", "w" );
    afis( ans, fout );
    fclose( fout );
    return 0;
}