C ++の様々なテンプレート

高精度:

Editionのオーバーロード演算子:

書式#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
const  int型 NR = 1E4;
チャーS [NR]。
構造体BIGINT 
{ 
    int型NUM [NR]。
    BIGINT()
    { 
        memsetの(NUM、0はsizeof (NUM))。
        NUM [ 0 ] = 1 ; 
    } 
    ボイドリード()
    { 
        scanf関数(" %sの" 、S); 
        NUM [ 0 ] =のSTRLEN(S)
        以下のためにint型 I = 1 ; I <= NUM [ 0 ]; iは++ 
            NUM [I] = sの[NUM [ 0 ] -i] - ' 0 ' 
    } 
    ボイドプリント()
    { 
        INT I = NUM [ 0 ]; I> = 1 ; i-- 
            のprintf(" %dの" 、NUM [I])。
        プット("" ); 
    } 
    BIGINT 演算子 +(CONST BIGINT&B)のconst 
    {  
        BIGINTのC;
        c.num [0 ] = MAX(NUM [ 0 ]、B.num [ 0 ])。
        以下のためにint型 iは= 1 ; I <= c.num [ 0 ]; iは++ 
        { 
            c.numを[I] + = NUM [I] + B.num [I]。
            c.num [I + 1 ] + = c.num [I] / 10 
            c.num [I]%= 10 
        } 
        の場合(c.num [c.num [ 0 ] + 1 ]> 0 
            c.num [ 0 ] ++ ;
        返しますint型 C;
    } 
}。
メイン(ボイド
{ 
    BIGINT、B、C。
    a.read(); 
    パン(); 
    C = A + B。
    c.print(); 
    リターン 0 ; 
}
コードの表示

通常の精度:

書式#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
const  int型 NR = 1E3;
チャー S [NR + 5 ]。
INT [NR + 5 ]、B [NR + 5 ]、[NR + C 5 ]。
ボイド(リードINT [])
{ 
    scanf関数(" %sの" 、S); 
    [ 0 ] =のSTRLEN(S)
    以下のためにint型 I = 1 ; I <= [ 0 ]; iは++ 
        [I]= S [ 0 ] -i] - ' 0 ' 
} 
ボイド(プリントINT [])
{ 
    ためint型 iは[= 0 ]; I> = 1 ; i-- 
        のprintf(" %dの" 、[I])。
    プット("" ); 
} 
ボイド addは(int型、[] INT [] B、INT C [])
{ 
    C [ 0 ] = MAX([ 0 ]、B [ 0 ])。
    以下のためのint型 I = 1;私は[= cを< 0 iが++;] 
    { 
        C [I] + = [I] + B [i]は、
        C [I + 1 ] = C [I] / 10 
        C [i]は%= 10 
    } 
    もし、(C [C 0 ] + 1 ]> 0 
        のprintf(" %dの"、[[C C 0 +] 1 )。
} 
int型のmain()
{ 
    (A)を読み出します。
    (B)を読み取ります。
    (A、B、C)を加えます。
    プリント(C); 
    リターン 0 ; 
}
コードの表示

高速電力:

書式#include <cstdioを> 
する#include <アルゴリズム>
 使用して 名前空間はstdを、
長い 長い PO(長い 長い X、長い 長い P、長い K)
{ 
    場合(のp == 0 リターン 1 もし(Pの== 1 リターンX。
    INT = PO(X、P / 2 、K); %= K。
    もし(P%2 == 0 リターン(* a)の%K;
    リターン(* x)から%K。
} 
INTメイン(ボイド
{ 
    長い 長いX、P、K。
    scanf関数(" %LLD%LLD%LLD "、&​​X、&P&K)。
    printf(" %LLD ^%LLD MOD%LLD =%LLD \ n "、X、P、K、PO(X、P、K)%のK)。
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/tarjin/p/11410615.html