7

我希望在我的代码中使用快速输入和输出。我了解使用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()函数来使用快速输出吗?

我正在处理这个问题,有人说putchar_unlocked()可以用于快速输出。

4

1 回答 1

9

下面的代码非常适合使用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() 的线程不安全版本并且速度更快。

见链接。

于 2014-03-16T15:24:07.960 回答