i wrote code calculate result of 100!, function stops giving correct answer after 22! here's code. assignment calculate sum of digits of 100!, code giver incorrect answers after 22!
/*calculates factorial of given number*/ double factorial(double num); /*calculates how many digits in number*/ int num_digits(double num); int main (int argc, char *argv[]) { double ans = factorial(23); int num = num_digits(ans); printf("%lf\n", ans); printf("%d\n", num); char x[num]; //convert number returned factorial() char array sprintf (x, "%lf", ans); int = 0; int sum= 0; (i = 0; < num; ++) { sum += x[i] - '0'; } printf("--\n%d\n", sum); return 0; } double factorial(double num) { int i; double sum = 1; /*heel simpel, gwn 1 x sum, sum * sum - 1 enz..*/ (i = num; > 0; --) { sum *= i; } return sum; }
22! 10^21, 2^63. means, can calculate 22! on 64 bit machine using normal arithmetic, not more because integer overflow, , result garbage. had use special library provides arithmetic larger numbers.
Comments
Post a Comment