Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2013-12-08 13:54:53.
Revizia anterioară Revizia următoare
Revizia anterioară Revizia următoare
Parsarea Numerelor
Sunt probleme care au datele de intrare mari (ex. 1 milion de numere), solutia e simpla: se poate parsa citirea
Numere naturale
#define DIM 10000
char buff[DIM];
int poz=0;
void citeste(int &numar)
{
numar = 0;
//cat timp caracterul din buffer nu e cifra ignor
while (buff[poz] < '0' || buff[poz] > '9')
//daca am "golit" bufferul atunci il umplu
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
//cat timp dau de o cifra recalculez numarul
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar = numar*10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
}
Numere intregi
#define DIM 10000
char buff[DIM];
int poz=0;
void citeste(int &numar)
{
numar = 0;
char semn='+';
while (buff[poz] < '0' || buff[poz] > '9')
{
semn = buff[poz];
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar = numar*10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
if (semn == '-')
numar = -numar;
}
in plus mai este o smecherie pentru numere intregi functia atoi din stdlib.h
void citeste(int &numar)
{
fgets(buff,32,stdin);
numar = atoi(buff);
}
acest cod functioneaza cand numerele apr pe randuri diferite
Numere reale
#define DIM 10000
char buff[DIM];
int poz=0;
void citeste(double &numar)
{
numar = 0;
char semn='+';
//caut inceputul numarului
while (buff[poz] < '0' || buff[poz] > '9')
{
semn = buff[poz];
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
//citesc partea de dinainte de virgula
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar = numar*10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
//daca are virgula citesc si partea de dupa
if (buff[poz] == '.')
{
double tmp,cnt;
tmp = 0;
cnt = 1;
++poz;
while ('0'<=buff[poz] && buff[poz]<='9')
{
cnt = cnt/10;
tmp = tmp + cnt*(double(buff[poz]-'0'));
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
numar += tmp;
}
//daca are semnul minus il fac negativ
if (semn == '-')
numar = - numar;
}