정밀 GCD

  1 #INCLUDE <iostream>
   2 #INCLUDE <cstdio>
   3 #INCLUDE <CString을>
   4  #DEFINE의 INF 1000000000
   5  이용  스페이스 성병;
  6   CH1 [ 10005 ], CH2 [ 10005 ];
  7  INT LA, LB, CNT;
  8 개  구조체 데이터 { int로 이 [ 1205 ], L} A, B;
  9  부울 COM ()
 10  {
 11 일      경우 (알 <BL) 복귀  0 ;
12      의 경우 (알> BL)  1;
(13)      에 대한이 ( int로 난 = 알; I> 0 ] - I)
 (14)          의 경우 (AA [I]> BA [I])  1 ;
(15)          그 밖의  경우 (단 [I] <BA [I]) 복귀  0 ;
16       1 ;
17  }
 18  무효 인쇄 (데이터 A)
 19  {
 20      동안 (AA [알] == 0 ) al-- ;
(21)      에 대한이 ( int로 난 = 알; I> 0 ] - I)
 (22)          의 경우 (I == AL)의 printf (" %의 D " , AA [I]);
23          다른에서 의 printf ( " %의 09d " , AA [I]);
24  }
 25  인라인 데이터 부 (데이터 A, 데이터 B)
 26  {
 27      INT의 K;
28 개      데이터 C;
(29)      에 대한이 ( int로 I = 1 ; i가 <= 1,200 ; ++ I)
 30      {
 31 일         경우 (ⅰ <= BL) CA [I] = AA [내가] - BA [I];
(32)         그 밖의  경우 는 (i <= AL) CA [내가] = 단 [I];
33         다른 CA [I] = 0 ;
34         의 경우 (CA [내가] < 0 )
 35         {
 36            CA [내가] + = INF;
(37)            단 [I + 1 ] - ;
38         }
 39      }
 40      CL = 알루미늄;
41      동안 (CA [CL] == 0 && c.l) cl-- ;
42      반환 C;
43  }
 44  공극 디바 ()
 45  {
 (46)      에 대해 ( int로 I = 1 ; 나는 알 = <; 내가 ++ )
 47      {
48          의 경우 (AA [I] 1 ) 단 [I- 1 ] + = INF / 2 ;
(49)          단 [I] >> = 1 ;
(50)      }
 (51)      의 경우 (AA [알]!의) al--을 ;
52  }
 53  무효 divb ()
 54  {
 (55)      에 대해 ( int로 I = 1 ; i가 <= BL; 내가 ++ )
 56      {
 (57)          의 경우 (BA [I] 1 ) (BA)가 [I- 1 ] + = INF / 2 ;
58          BA [I] >> = 1 ;
(59)     }
 60      경우 bl-- (BA [BL]!) ;
61  }
 62  무효 MUL ()
 63  {
 (64)      에 대한이 ( int로 난을 알 =; I> 0 , 난 - )
 65      {
 66         AA [I] << = 1 ;
(67)         단 [I + 1 ] + = AA [I] / INF;
(68)         단 [I] = % INF;
69      }
 70      동안 (AA [알]> 0 ) a.l ++ ;
(71)      에 대한이 ( int로 난의 BL = 단계; I> 0; 난 - )
 72      {
 73         BA [I] << = 1 ;
74         BA [내가 + 1 ] + = BA [내가] / INF;
75         BA [I] = % INF;
76      }
 77      동안 (BA [BL]> 0 ) b.l ++ ;
78  }
 79  INT 의 main ()
 80  {
 81      는 scanf ( " % S %의 S " , CH1 + 1 , CH + 1 );
82      라 = 용의 strlen (CH1 + 1 ) = (LB)의 나 strlen (CH2 + 1 );
(83)     흐름 (라 % 9 ) A = 라 / 9 + 1 ;
84      다른 A = 라 / 9 ;
85      아우 (파운드 % 9 = LB를 포함) / 9 + 1 ;
86      다른 =의 LB와 / 9 ;
87       ( 하면 I = 1 ; I <= A; ++ I)
 88      {
 89          "다시하지 K1 = 최대 ( 1 , 나도이 * 9 + 1 ), K2 = la- (I- 1 ) * (9) ;
(90)          에 대한 (INT의 J = K1, J <= K2; ++ j)는
 91의              단 [I] = AA [I] * 10 + CH1 [J] - ' 0 ' ;
92      }
 93       ( int로 I = 1 ; I <= BL; ++ I)
 94      {
 95          INT의 K1 = 최대 ( 1 , LB-난 * 9 + 1 ), K2 = lb- (I- 1 ) * (9) ;
96           ( INT의 , J <= K2, J = K1 ++ j)는
 97              BA [I] = BA [I] * 10 + CH2 [J] - ' 0 ';
98      }
 99      동안 ( 1 )
 (100)      {
 101          경우 ((AA [ 1 ] % (2) == 0 ) && (BA [ 1 ] % (2) == 0 )) {디바 (); divb (); CNT ++ }
 102          다른  경우 ((AA [ 1 ] % (2) == 0 )) 디바 ();
(103)          그 밖의  경우 ((BA [ 1 ] % (2) == 0 )) divb ();
104          만약 (COM ()) {A = 서브 (a, b); 만약 (! 알) {동안 CNT (-) MUL () 인쇄 (b); 침입 ;}}
 105          밖의 {b는 서브 (b를 a); 만약 (! BL) { 동안 (CNT -) MUL (); 인쇄 (A); 침입 ;}}
 106      }
 107      복귀  0 ;
108 }

 

추천

출처www.cnblogs.com/WestJackson/p/11389418.html