#include <stdio.h>
#include <math.h>
typedef unsigned int Uint;
#define N 100
Uint DP=1;
//RADIX == 10^LOG
#define LOG 1
#define RADIX 10
typedef Uint Liczba[N+1];
void pisz( Liczba a, int ctrl){ 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
]); if( ctrl
< 0 ) puts("");}
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 w, Liczba a, Uint b ) { // w[]:=a[] / b
Uint z=0; // return w[] != 0
for( Uint c=0, i=1; i<=N; i++ ) {
c = c*RADIX+a[i];
w[i]= c/b % RADIX; if( w[i] ) z=1;
c = c - w[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 atg( Liczba a, Uint x ) { // a[]:= atan( 1/x )
Liczba px;
wstawU( px, 1 ); podzielU( px, px, x );
wstawU( a, 0 ); plus ( a, px );
for( Uint n=1; ; n++){
Liczba b;
podzielU( px, px, x*x );
if( ! podzielU( b, px, 2*n + 1 ) )
break;
if( n & 1 ) minus( a, b );
else plus( a, b );}}
void silnia( Liczba a, Uint n ){ // a[]:= n!
wstawU( a, 1 );
while( n>1 )
razyU( a, n-- );}
int main(void) {
Liczba a1, a2;
atg ( a1, 5 );
razyU( a1, 4 );
atg ( a2, 239);
minus( a1, a2 );
razyU( a1, 4 );
pisz ( a1, -1 );
DP=N-1;
silnia(a1, 69 );
pisz ( a1, -1 );
puts( "3,141592653589793238462643383279502884197169399375" "10582097494459230781640628620899862803482534211706"
"79821480865132823066470938446095505822317253594081"
"28481117450284102701938521105559644622948954930381");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBVaW50OwojZGVmaW5lIE4gMTAwClVpbnQgRFA9MTsKLy9SQURJWCA9PSAxMF5MT0cKI2RlZmluZSBMT0cgMQojZGVmaW5lIFJBRElYIDEwCnR5cGVkZWYgVWludCBMaWN6YmFbTisxXTsKIAp2b2lkIHBpc3ooIExpY3piYSBhLCBpbnQgY3RybCl7IFVpbnQgaTsKCWZvciggaT0xOyBpPERQICYmICFhW2ldOyBpKysgKSBwcmludGYoIiUqcyIsIExPRywiIik7CglwcmludGYoIiUqdSIsIExPRywgYVtpXSk7Cglmb3IoIGkrKzsgaTw9RFA7IGkrKyApIHByaW50ZigiJTAqdSIsIExPRywgYVtpXSk7CglwdXRjaGFyKCcuJyk7Cglmb3IoICAgIDsgaTw9TjsgaSsrICkgcHJpbnRmKCIlMCp1IiwgTE9HLCBhW2ldKTsgCglpZiggY3RybCA8IDAgKSBwdXRzKCIiKTt9CgkJCnZvaWQgcGx1cyggTGljemJhIGEsIExpY3piYSBiKXsgICAgICAgICAgICAgICAgICAvLyBhW106PWFbXStiW10KCWZvciggVWludCBjPTAsIGk9TjsgaT4wOyBpLS0gKXsKCQljICs9IGFbaV0rYltpXTsKCQlhW2ldID0gYyAlIFJBRElYOwoJCWMgLz0gUkFESVg7fX0KCnZvaWQgbWludXMoIExpY3piYSBhLCBMaWN6YmEgYiApIHsgICAgICAgICAgICAgICAvLyBhW106PWFbXS1iW10KCWZvciggVWludCBjPTAsIGk9TjsgaT4wOyBpLS0gKXsKCQljICs9IGJbaV07CgkJaWYoIGFbaV08YyApewoJCQlhW2ldID0gUkFESVggKyBhW2ldIC0gYzsgYz0xOyB9CgkJZWxzZSB7CgkJCWFbaV0gLT0gYzsgYz0wOyB9fX0KCnZvaWQgcmF6eVUoIExpY3piYSBhLCBVaW50IGIgKSB7ICAgICAgICAgICAgICAgICAvLyBhW106PWFbXSAqIGIKCWZvciggVWludCBjPTAsaT1OOyBpPjA7IGktLSApewoJCWMgKz0gYVtpXSpiOwoJCWFbaV09IGMgJSBSQURJWDsKCQljIC89IFJBRElYOyB9fQoKaW50IHBvZHppZWxVKCBMaWN6YmEgdywgTGljemJhIGEsIFVpbnQgYiApIHsgICAgIC8vIHdbXTo9YVtdIC8gYgoJVWludCB6PTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gd1tdICE9IDAKCWZvciggVWludCBjPTAsIGk9MTsgaTw9TjsgaSsrICkgewoJCWMgPSBjKlJBRElYK2FbaV07CgkJd1tpXT0gYy9iICUgUkFESVg7IGlmKCB3W2ldICkgej0xOwoJCWMgPSBjIC0gd1tpXSpiO30KCXJldHVybiB6O30KCnZvaWQgd3N0YXdVKCBMaWN6YmEgYSwgVWludCBiICkgeyAgICAgICAgICAgICAgICAvLyBhW106PSBiCglVaW50IGk7Cglmb3IoIGk9MDsgaTw9TjsgaSsrICkgYVtpXT0wOwoJaT1EUDsKCXdoaWxlKCBiICkgewoJCWFbaS0tXSA9IGIlUkFESVg7IGIgLz0gUkFESVg7IH19Cgp2b2lkIGF0ZyggTGljemJhIGEsIFVpbnQgeCApIHsgICAgICAgICAgICAgICAgICAvLyBhW106PSBhdGFuKCAxL3ggKQoJTGljemJhIHB4OwoJd3N0YXdVKCBweCwgMSApOyBwb2R6aWVsVSggcHgsIHB4LCB4ICk7Cgl3c3Rhd1UoIGEsICAwICk7IHBsdXMgICAgKCBhLCBweCApOwoJZm9yKCBVaW50IG49MTsgICA7IG4rKyl7CgkJTGljemJhIGI7CgkJcG9kemllbFUoIHB4LCBweCwgeCp4ICk7CgkJaWYoICEgcG9kemllbFUoIGIsIHB4LCAyKm4gKyAxICkgKQoJCQlicmVhazsKCQlpZiggbiAmIDEgKSBtaW51cyggYSwgYiApOwoJCWVsc2UgcGx1cyggYSwgYiApO319CgkKdm9pZCBzaWxuaWEoIExpY3piYSBhLCBVaW50IG4gKXsgICAgICAgICAgICAgICAgIC8vIGFbXTo9IG4hCgl3c3Rhd1UoIGEsIDEgKTsKCXdoaWxlKCBuPjEgKQoJCXJhenlVKCBhLCBuLS0gKTt9ICAgICAgICAgICAgCgppbnQgbWFpbih2b2lkKSB7CglMaWN6YmEgYTEsIGEyOwoJYXRnICAoIGExLCAgNSApOyAKCXJhenlVKCBhMSwgIDQgKTsKCWF0ZyAgKCBhMiwgMjM5KTsKCW1pbnVzKCBhMSwgYTIgKTsKCXJhenlVKCBhMSwgIDQgKTsKCXBpc3ogKCBhMSwgLTEgKTsgCgkKCURQPU4tMTsKCXNpbG5pYShhMSwgNjkgKTsKCXBpc3ogKCBhMSwgLTEgKTsKCXB1dHMoCSIzLDE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjg4NDE5NzE2OTM5OTM3NSIKCQkiMTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDYiCgkJIjc5ODIxNDgwODY1MTMyODIzMDY2NDcwOTM4NDQ2MDk1NTA1ODIyMzE3MjUzNTk0MDgxIgoJCSIyODQ4MTExNzQ1MDI4NDEwMjcwMTkzODUyMTEwNTU1OTY0NDYyMjk0ODk1NDkzMDM4MSIpOwoJcmV0dXJuIDA7Cn0K