77 */ 
88
99
10- 
1110class  BigInteger
1211{
1312
@@ -44,7 +43,8 @@ public function __construct(string $number)
4443        if  ($ number  == "0 " ) $ this  ->lastDigit  = 0 ;
4544    }
4645
47-     public  static  function  print (BigInteger   &$ n ) {
46+     public  static  function  print (BigInteger   &$ n )
47+     {
4848        if  ($ n ->signBit  == BigInteger::MINUS ) echo  "-  " ;
4949        for  ($ i  = $ n ->lastDigit ; $ i  >= 0 ; $ i --)
5050            echo  $ n ->digits [$ i ];
@@ -242,12 +242,13 @@ public static function divide(BigInteger &$a, BigInteger &$b, BigInteger &$c)
242242        $ b ->signBit  = $ bsign ;
243243    }
244244
245-     public  static  function  factorial  (int  $ n , BigInteger   &$ c ) {
245+     public  static  function  factorial (int  $ n , BigInteger   &$ c )
246+     {
246247
247248        BigInteger::toBigInteger ("1 " , $ c );
248249
249-         if ($ n  > 0 ) {
250-             for ($ i  = 1 ;$ i <= $ n ;$ i ++) {
250+         if   ($ n  > 0 ) {
251+             for   ($ i  = 1 ;  $ i  <=  $ n ;  $ i ++) {
251252                $ tmp  = clone  $ c ;
252253                $ number  = new  BigInteger ($ i );
253254                $ result  = new  BigInteger ("0 " );
@@ -258,8 +259,23 @@ public static function factorial (int $n, BigInteger &$c) {
258259        BigInteger::zeroJustify ($ c );
259260    }
260261
261- }
262+     public  static  function  power (BigInteger   &$ a , int  $ n , BigInteger   &$ c )
263+     {
262264
265+         BigInteger::toBigInteger ("1 " , $ c );
266+ 
267+         if  ($ n  > 0 ) {
268+             for  ($ i  = 0 ; $ i  < $ n ; $ i ++) {
269+                 $ tmp  = clone  $ c ;
270+                 $ result  = new  BigInteger ("0 " );
271+                 BigInteger::multiply ($ a , $ tmp , $ result );
272+                 $ c  = $ result ;
273+             }
274+         }
275+         BigInteger::zeroJustify ($ c );
276+     }
277+ 
278+ }
263279
264280
265281$ first  = new  BigInteger ("1234567812345678123456781234567812345678 " );
@@ -281,6 +297,11 @@ public static function factorial (int $n, BigInteger &$c) {
281297BigInteger::divide ($ first , $ second , $ divide );
282298BigInteger::print ($ divide );
283299
300+ $ number  = new  BigInteger ("55 " );
301+ $ power  = new  BigInteger ("0 " );
302+ BigInteger::power ($ number , 5 , $ power );
303+ BigInteger::print ($ power );
304+ 
284305$ factorial  = new  BigInteger ("0 " );
285306BigInteger::factorial (100 , $ factorial );
286307BigInteger::print ($ factorial );
0 commit comments