快讀、快輸
阿新 • • 發佈:2018-12-27
快讀快輸的含義
在這裡給大家介紹一下快讀快輸,自己也存個檔。。。。。。
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不會縮時間(吧)