1. 程式人生 > >快讀、快輸

快讀、快輸

快讀快輸的含義

在這裡給大家介紹一下快讀快輸,自己也存個檔。。。。。。

inline void read(int &x) {//開實參,要使讀入的值在裡面發生變化
    x=0;                  //如果對實參不瞭解的可以改為int型別的
    int f=1;//這個是用來判斷正負的標誌
    char s=getchar();//讀入每一個空行、空格和數字
    while(s<'0'||s>'9') {//讀入空格和換行階段
        if(s=='-')//表明這個數是負數
            f=-1;
        s=getchar();//重複讀入知道TA是數字
    }
    while(s>='0'&&s<='9') {//讀入數字階段
        x=x*10+s-48;//計算x的值,'0'的ASCII碼值是48,身下的自己想
        s=getchar();//重複讀入直到TA讀完
    }
    x*=f;//正數不改變符號(x*1),負數就改變(x*-1)
}//此之謂快讀
inline void pr(int x) {
    if(x<0) {//負數
        putchar('-');//要先輸出負號
        x=-x;//然後就以正數情況輸出,這個可以放到pr外面判斷,可以節省一丟丟時間
    }
    if(x>9)//因為putchar一次只能輸出一位,而且要從前往後輸出,所以要用遞迴輸出
        pr(x/10);//遞迴輸出
    putchar(x%10+48);//作為字元輸出
}

這裡的inline可以節省函式呼叫的時間,但建議遞迴是不要用,有可能會爆

總的再來一個可以copy的:

inline void read(int &x) {
    x=0;
    int f=1;
    char s=getchar();
    while(s<'0'||s>'9') {
        if(s=='-')
            f=-1;
        s=getchar();
    }
    while(s>='0'&&s<='9') {
        x=x*10+s-48;
        s=getchar();
    }
    x*=f;
}
inline void pr(int x) {
    if(x<0) {
        putchar('-');
        x=-x;
    }
    if(x>9)
        pr(x/10);
    putchar(x%10+48);
}

還有一個,純屬個人測試,(好像)register不會縮時間(吧)

會縮時間        不會縮時間