Atenție! Aceasta este ultima versiune a paginii., scrisă la 2023-03-23 14:57:20.000.
Revizia anterioară   Revizia următoare  

Implementare minimalistă parsare I/O in C:

#include <ctype.h>
#include <stdio.h>

// Modificati numele fisierelor de intrare
#define FILE_IN "fisier.in"
#define FILE_OUT "fisier.out"
#define BUFF_SIZE 131072
#define MAX_DIG_LEN 20


FILE *file_in, *file_out;
char buff[BUFF_SIZE], obuff[BUFF_SIZE], num_buff[MAX_DIG_LEN];
int pos = 0, opos = 0;

static inline void init_parsing() {
    file_in = fopen(FILE_IN, "r");
    file_out = fopen(FILE_OUT, "w");
    fread(buff, 1, BUFF_SIZE, file_in);
}

static inline void finish_parsing() {
    fwrite(obuff, 1, opos, file_out);
    fclose(file_in);
    fclose(file_out);
}

static inline void read_int(int *n) {
    while (isspace(buff[pos])) {
        pos++;
        if (pos == BUFF_SIZE) {
            fread(buff, 1, BUFF_SIZE, file_in);
            pos = 0;
        }
    }

    int nr = 0;

    while (isdigit(buff[pos])) {
        nr = nr * 10 + buff[pos++] - '0';
        if (pos == BUFF_SIZE) {
            fread(buff, 1, BUFF_SIZE, file_in);
            pos = 0;
        }
    }

    *n = nr;
}

static inline void write_ch(char ch) {
    obuff[opos++] = ch;
    if (opos == BUFF_SIZE) {
        fwrite(obuff, 1, BUFF_SIZE, file_out);
        opos = 0;
    }
}

static inline void write_ll(long long n) {
    int idx = 0;
    do {
        num_buff[++idx] = n % 10 + '0';
        n /= 10;
    } while (n > 0);

    while (idx)
        write_ch(num_buff[idx--]);
}

static inline void write_int(int n) {
    int idx = 0;
    do {
        num_buff[++idx] = n % 10 + '0';
        n /= 10;
    } while (n > 0);

    while (idx)
        write_ch(num_buff[idx--]);
}

int main() {
    init_parsing();

    // Exemplu de utilizare
    int a, b, sum;
    long long product;
    read_int(&a);
    read_int(&b);

    sum = a + b;
    product = 1LL * a * b;

    write_int(sum);
    write_ch(' ');
    write_ll(product);
    write_ch('\n');

    finish_parsing();

    return 0;
}