2013-08-02 19 views
6

Chciałbym użyć szybkiego wejścia i wyjścia w moim kodzie. Zrozumiałem użycie funkcji getchar_unlocked do szybkiego wprowadzania danych za pomocą poniższej funkcji.przy użyciu putchar_unlocked dla szybkiego wyjścia

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; 
} 

Czy ktoś może mi wyjaśnić, jak używać szybkiego wyjścia przy użyciu funkcji putchar_unlocked()?

Przechodziłem przez this question i tam ktoś powiedział, że putchar_unlocked() może być użyty do szybkiego wyjścia.

+0

czy używasz C++ lub c? – aaronman

+0

@Aaronman Używam C++ –

+0

Więc nie rób tego, bo prawdopodobnie go nie potrzebujesz – aaronman

Odpowiedz

7

Dobrze następujący kod działa również na szybkie wyjście przy użyciu 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'); 
    } 

Normalnie printf jest dość szybko wyjść, jednak na piśmie Integer lub dużego wyjścia, funkcja poniżej jest nieco tad szybciej.
Tutaj używamy metody putchar_unlocked() do wyprowadzania znaku, który jest podobną do wątku wersją putchar() i jest szybszy.

See Link.

+0

Sprawdza tylko, czy liczba ma wartość '0 "seq na końcu. Ta funkcja nie działa, jeśli liczba ma sekwencje "0" w środku. np .: 12300023 – 648trindade

+0

@ 648trindade It Works. –

Powiązane problemy