2013-08-02 28 views
6

के लिए putchar_unlocked का उपयोग करके मैं अपने कोड में तेज़ इनपुट और आउटपुट का उपयोग करना चाहता हूं। मैं नीचे दिए गए फ़ंक्शन का उपयोग करके तेज़ इनपुट के लिए getchar_unlocked के उपयोग को समझ गया।तेजी से आउटपुट

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

कोई मुझे बताएं कि किस तरह putchar_unlocked() फ़ंक्शन का उपयोग तेजी से उत्पादन का उपयोग करने के लिए कृपया कर सकते हैं?

मैं this question के माध्यम से जा रहा था और वहां किसी ने कहा कि putchar_unlocked() का उपयोग तेजी से आउटपुट के लिए किया जा सकता है।

+0

आप C++ या ग का उपयोग कर रहे हैं? – aaronman

+0

@Aaronman मैं C++ –

+0

का उपयोग कर रहा हूं, तो ऐसा न करें क्योंकि आपको शायद इसकी आवश्यकता नहीं है – aaronman

उत्तर

7

अच्छी तरह से निम्न कोड 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'); 
    } 

आम तौर पर Printf तथापि पूर्णांक या लांग आउटपुट लिखने के लिए काफी तेजी से आउटपुट के लिए है, नीचे दिए गए समारोह एक बालक थोड़ा तेज है।
यहां हम putchar_unlocked() विधि का उपयोग ऐसे चरित्र को आउटपुट करने के लिए करते हैं जो Putchar() के समान थ्रेड-असुरक्षित संस्करण है और तेज़ है।

See Link.

+0

यह केवल तभी जांचता है जब संख्या में 0 ' 'सीईसी अंत में आप यह फ़ंक्शन काम नहीं करता है यदि संख्या में मध्य में '0' अनुक्रम हैं। पूर्व .: 12300023 – 648trindade

+0

@ 648trindade यह काम करता है। –

संबंधित मुद्दे