Atenție! Aceasta este ultima versiune a paginii., scrisă la 2023-03-23 14:57:20.000.
Revizia anterioară Revizia următoare
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;
}