#24143: C++可以使用__int128


yes51851823@gmail.com (wseds)

學校 : 國立花蓮高級工業職業學校
編號 : 108813
來源 : [36.227.245.149]
最後登入時間 :
2024-04-16 01:11:16
d177. 求最小正同界角 -- 高中一下課程(三角函數) | From: [111.243.236.221] | 發表日期 : 2021-01-22 20:21

這題雖然是大數,但其實也就只到2^65,所以是可以用__int128直接處理的,不過一般的輸入輸出不支援__int128,所以可以利用下面的函數來IO。

 

bool num(char b){

return b<58 and b>47;

}

void input(__int128 &C){  //輸入 

    C=0;

char B;

bool Q=0;

while(B=getchar()){

if(!num(B)){

    if(Q) C=-C;

    if(B=='-') Q=1;

    else return;

        }

else C=(C*10)+(B-48);

}

}

void print(__int128 A){  //輸出 

    if(A<0) putchar('-'),A=-A;

    if(!A) putchar('0');

    int X[40];

    for(int i=39;i>-1;--i)

    X[i]=A%10,A/=10;

    bool Q=0;

    for(int i=0;i<40;++i){

        if(Q) putchar(X[i]+48);

        else if(X[i]) Q=1,--i;

    }

    putchar('\n');

}

 
#24282: Re:C++可以使用__int128


yes51851823@gmail.com (wseds)

學校 : 國立花蓮高級工業職業學校
編號 : 108813
來源 : [36.227.245.149]
最後登入時間 :
2024-04-16 01:11:16
d177. 求最小正同界角 -- 高中一下課程(三角函數) | From: [111.243.184.91] | 發表日期 : 2021-02-03 18:11

這題雖然是大數,但其實也就只到2^65,所以是可以用__int128直接處理的,不過一般的輸入輸出不支援__int128,所以可以利用下面的函數來IO。

 

bool num(char b){

return b47;

}

void input(__int128 &C){  //輸入 

    C=0;

char B;

bool Q=0;

while(B=getchar()){

if(!num(B)){

    if(Q) C=-C;

    if(B=='-') Q=1;

    else return;

        }

else C=(C*10)+(B-48);

}

}

void print(__int128 A){  //輸出 

    if(A<0) putchar('-'),A=-A;

    if(!A) putchar('0');

    int X[40];

    for(int i=39;i>-1;--i)

    X[i]=A%10,A/=10;

    bool Q=0;

    for(int i=0;i<40;++i){

        if(Q) putchar(X[i]+48);

        else if(X[i]) Q=1,--i;

    }

    putchar('\n');

}

class IO128{

    public:

        #define num(b) (b<58&&b>47)

        void input(__int128 &C){

            C=0;

        char B;

        bool Q=0;

        while(B=getchar()){

        if(!num(B)){

            if(Q) C=-C;

            if(B=='-') Q=1;

            else return;

                }

        else C=(C*10)+(B-48);

        }

        }

        void print(__int128 A,char End){

            if(!A) putchar('0'),putchar(End);

            if(A<0) putchar('-'),A=-A;

            int X[40];

            for(int i=39;i>-1;--i)

            X[i]=A%10,A/=10;

            bool Q=0;

            for(int i=0;i<40;++i){

                if(Q) putchar(X[i]+48);

                else if(X[i]) Q=1,--i;

            }

            putchar(End);

        }

}IO128;

 

IO128.input( 你要儲存輸入的int128變數 )

IO128.print( 你要輸出的數 )

 
ZeroJudge Forum