#include #include #include mpz_t *mpz_array(int number_of_elements); void mpz_init_array(mpz_t *array,int number_of_elements); void fraction_expansion(mpz_t *fraction,unsigned int expansions,unsigned int expansion); mpz_t *e(unsigned int expansions); int main() { char numerator[60]; int index=0,sum=0; mpz_t *fraction; fraction=e(100); gmp_sprintf(numerator,"%Zd",fraction[0]); for(;numerator[index]!='\0';index++) sum+=numerator[index]-48; // sum+=numerator[index]-'0'; printf("\n\t%i\n\n",sum); return 0; } mpz_t *mpz_array(int number_of_elements) { mpz_t *array; array=malloc(number_of_elements*sizeof(mpz_t)); mpz_init_array(array,number_of_elements); return array; } void mpz_init_array(mpz_t *array,int number_of_elements) { int element=0; for(;element0) // and the denominator(not necessarily { // in this order) of the fraction that // approximates the decimal part of // 'e' with the specified number of // iterations. mpz_set(auxiliary,fraction[0]); // Must be checked the order of the mpz_set(fraction[0],fraction[1]); // returned elements (the fraction mpz_set(fraction[1],auxiliary); // have to be lesser of one). } mpz_mul_si(auxiliary,fraction[1],2); mpz_add(fraction[0],fraction[0],auxiliary); return fraction; }