#include <stdio.h>
typedef unsigned int Uint;
#define N 100
#define DP 15
//RADIX == 10^LOG
#define LOG 1
#define RADIX 10
typedef Uint Liczba[ N+ 1 ] ;
void plus( Liczba a, Liczba b) { // a[]:=a[]+b[]
for ( Uint c= 0 , i= N; i> 0 ; i-- ) {
c += a[ i] + b[ i] ;
a[ i] = c % RADIX;
c /= RADIX; } }
void minus( Liczba a, Liczba b ) { // a[]:=a[]-b[]
for ( Uint c= 0 , i= N; i> 0 ; i-- ) {
c += b[ i] ;
if ( a[ i] < c ) {
a[ i] = RADIX + a[ i] - c; c= 1 ; }
else {
a[ i] -= c; c= 0 ; } } }
void razyU( Liczba a, Uint b ) { // a[]:=a[] * b
for ( Uint c= 0 , i= N; i> 0 ; i-- ) {
c += a[ i] * b;
a[ i] = c % RADIX;
c /= RADIX; } }
int podzielU( Liczba a, Uint b ) { // a[]:=a[] / b
Uint z= 0 ;
for ( Uint c= 0 , i= 1 ; i<= N; i++ ) {
c = c* RADIX+ a[ i] ;
a[ i] = c/ b % RADIX; if ( a[ i] ) z= 1 ;
c = c - a[ i] * b; }
return z; }
void wstawU( Liczba a, Uint b ) { // a[]:= b
Uint i;
for ( i= 0 ; i<= N; i++ ) a[ i] = 0 ;
i= DP;
while ( b ) {
a[ i-- ] = b% RADIX; b /= RADIX; } }
void atan ( Liczba a
, Uint x
) { // a[]:= atan( 1/x ) Liczba w;
wstawU( w, 1 ) ; wstawU( a, 1 ) ; podzielU( a, x) ;
do {
x *= x* x; z= podziel( w, x* n ) ; n+= 2 ; odejmij( a, w ) ;
x *= x* x; z= podziel( w, x* n ) ; n += 2 ; dodaj( a, w ) ;
} while ( z ) ; }
void pisz( Liczba a ) { Uint i;
for ( i
= 1 ; i
<= DP
&& ! a
[ i
] ; i
++ ) printf ( "%*s" , LOG
, "" ) ; for ( i
++; i
<= DP
; i
++ ) printf ( "%0*u" , LOG
, a
[ i
] ) ; for ( ; i
<= N
; i
++ ) printf ( "%0*u" , LOG
, a
[ i
] ) ; }
int main( void ) {
Liczba a;
wstawU( a, 12 ) ;
razyU
( a
, 125 ) ; pisz
( a
) ; puts ( "" ) ; podzielU
( a
, 77 ) ; pisz
( a
) ; puts ( "" ) ; printf ( "\n %0.14f\n " , 12.0 * 125 / 77.0 ) ; return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBVaW50OwojZGVmaW5lIE4gMTAwCiNkZWZpbmUgRFAgMTUKLy9SQURJWCA9PSAxMF5MT0cKI2RlZmluZSBMT0cgMQojZGVmaW5lIFJBRElYIDEwCnR5cGVkZWYgVWludCBMaWN6YmFbTisxXTsKIAp2b2lkIHBsdXMoIExpY3piYSBhLCBMaWN6YmEgYil7ICAgICAgICAgICAgICAgICAgLy8gYVtdOj1hW10rYltdCglmb3IoIFVpbnQgYz0wLCBpPU47IGk+MDsgaS0tICl7CgkJYyArPSBhW2ldK2JbaV07CgkJYVtpXSA9IGMgJSBSQURJWDsKCQljIC89IFJBRElYO319Cgp2b2lkIG1pbnVzKCBMaWN6YmEgYSwgTGljemJhIGIgKSB7ICAgICAgICAgICAgICAgLy8gYVtdOj1hW10tYltdCglmb3IoIFVpbnQgYz0wLCBpPU47IGk+MDsgaS0tICl7CgkJYyArPSBiW2ldOwoJCWlmKCBhW2ldPGMgKXsKCQkJYVtpXSA9IFJBRElYICsgYVtpXSAtIGM7IGM9MTsgfQoJCWVsc2UgewoJCQlhW2ldIC09IGM7IGM9MDsgfX19Cgp2b2lkIHJhenlVKCBMaWN6YmEgYSwgVWludCBiICkgeyAgICAgICAgICAgICAgICAgLy8gYVtdOj1hW10gKiBiCglmb3IoIFVpbnQgYz0wLGk9TjsgaT4wOyBpLS0gKXsKCQljICs9IGFbaV0qYjsKCQlhW2ldPSBjICUgUkFESVg7CgkJYyAvPSBSQURJWDsgfX0KCmludCBwb2R6aWVsVSggTGljemJhIGEsIFVpbnQgYiApIHsgICAgICAgICAgICAgIC8vIGFbXTo9YVtdIC8gYgoJVWludCB6PTA7Cglmb3IoIFVpbnQgYz0wLCBpPTE7IGk8PU47IGkrKyApIHsKCQljID0gYypSQURJWCthW2ldOwoJCWFbaV09IGMvYiAlIFJBRElYOyBpZiggYVtpXSApIHo9MTsKCQljID0gYyAtIGFbaV0qYjt9CglyZXR1cm4gejt9Cgp2b2lkIHdzdGF3VSggTGljemJhIGEsIFVpbnQgYiApIHsgICAgICAgICAgICAgICAgLy8gYVtdOj0gYgoJVWludCBpOwoJZm9yKCBpPTA7IGk8PU47IGkrKyApIGFbaV09MDsKCWk9RFA7Cgl3aGlsZSggYiApIHsKCQlhW2ktLV0gPSBiJVJBRElYOyBiIC89IFJBRElYOyB9fQoKdm9pZCBhdGFuKCBMaWN6YmEgYSwgVWludCB4ICkgeyAgICAgICAgICAgICAgICAgIC8vIGFbXTo9IGF0YW4oIDEveCApCglMaWN6YmEgdzsKCXdzdGF3VSggdywgMSApOyB3c3Rhd1UoIGEsIDEgKTsgcG9kemllbFUoYSwgeCk7CglkbyB7CgkJeCAqPSB4Kng7IHo9cG9kemllbCggdywgeCpuICk7IG4rPTI7IG9kZWptaWooIGEsIHcgKTsKCQl4ICo9IHgqeDsgej1wb2R6aWVsKCB3LCB4Km4gKTsgbiArPSAyOyBkb2RhaiggYSwgdyApOwoJfSB3aGlsZSggeiApO30JCgp2b2lkIHBpc3ooIExpY3piYSBhICl7IFVpbnQgaTsKCWZvciggaT0xOyBpPD1EUCAmJiAhYVtpXTsgaSsrICkgcHJpbnRmKCIlKnMiLCBMT0csIiIpOwoJcHJpbnRmKCIlKnUiLCBMT0csIGFbaV0pOwoJZm9yKCBpKys7IGk8PURQOyBpKysgKSBwcmludGYoIiUwKnUiLCBMT0csIGFbaV0pOwoJcHV0Y2hhcignLicpOwoJZm9yKCAgICA7IGk8PU47IGkrKyApIHByaW50ZigiJTAqdSIsIExPRywgYVtpXSk7IH0KCQkKaW50IG1haW4odm9pZCkgewoJTGljemJhIGE7Cgl3c3Rhd1UoYSwgMTIpOyAKCXJhenlVKGEsIDEyNSk7IHBpc3ooYSk7IHB1dHMoIiIpOwoJcG9kemllbFUoYSwgNzcpOyBwaXN6KGEpOyBwdXRzKCIiKTsKCXByaW50ZigiXG4lMC4xNGZcbiIsIDEyLjAqMTI1Lzc3LjApOwoJcmV0dXJuIDA7Cn0K