2013-08-02 11 views
6

Desidero utilizzare l'input e l'output veloce nel mio codice. Ho capito l'uso di getchar_unlocked per l'input veloce usando la funzione seguente.utilizzando putchar_unlocked per l'uscita veloce

inline int next_int() { 
    int n = 0; 
    char c = getchar_unlocked(); 
    while (!('0' <= c && c <= '9')) { 
     c = getchar_unlocked(); 
    } 
    while ('0' <= c && c <= '9') { 
     n = n * 10 + c - '0'; 
     c = getchar_unlocked(); 
    } 
    return n; 
} 

Per favore qualcuno può spiegare come utilizzare l'uscita veloce utilizzando la funzione putchar_unlocked()?

Stavo passando attraverso this question e lì qualcuno ha detto putchar_unlocked() potrebbe essere utilizzato per l'output veloce.

+0

stai usando C++ o c? – aaronman

+0

@aaronman sto usando C++ –

+0

Quindi non farlo perché probabilmente non ne hai bisogno – aaronman

risposta

7

Bene, il seguente codice funziona bene per l'output veloce utilizzando putchar_unlocked().

#define pc(x) putchar_unlocked(x); 
    inline void writeInt (int n) 
    { 
     int N = n, rev, count = 0; 
     rev = N; 
     if (N == 0) { pc('0'); pc('\n'); return ;} 
     while ((rev % 10) == 0) { count++; rev /= 10;} //obtain the count of the number of 0s 
     rev = 0; 
     while (N != 0) { rev = (rev<<3) + (rev<<1) + N % 10; N /= 10;} //store reverse of N in rev 
     while (rev != 0) { pc(rev % 10 + '0'); rev /= 10;} 
     while (count--) pc('0'); 
    } 

Normalmente Printf è abbastanza veloce per le uscite, ma per la scrittura di numero intero o lunghe uscite, la funzione qui sotto è un po 'po' più veloce.
Qui usiamo il metodo putchar_unlocked() per l'output di un carattere che è simile alla versione thread-safe di putchar() ed è più veloce.

See Link.

+0

Controlla solo se il numero ha un '0 'seq alla fine Questa funzione non funziona se il numero ha sequenze '0' nel mezzo. es .: 12300023 – 648trindade

+0

@ 648trindade Funziona. –

Problemi correlati