高精度:
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 ; }