Редактировать - Изменено название, чтобы соответствовать фактической постановке задачи.Вычислить сумму цифр в 100 factorial
Я программирую функцию, которая вычисляет сумму цифр в 100! но у меня, похоже, есть две большие проблемы.
Фактический результат 100! точна только на несколько первых цифр (фактический результат 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000)
Мой метод сложения цифр получившегося числа не выводит правильный результат.
Это мой текущий код:
void factorialSum()
{
double fact100 = factorial(100);
double suma = 0;
printf("100! is equal to: %.0f", fact100);
while (fact100 > 0)
{
double temporal = fmod(fact100, 10);
suma = suma + temporal;
fact100 = fact100/10;
}
printf("\nThe sum of all digits in 100! is: %.0f", suma);
}
И функция факториала() определяется как:
double factorial (double n)
{
double mult = 1;
double i = n;
while (i>=1)
{
mult *= i;
i = i - 1;
}
return mult;
}
Программа выводит 93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248 в результате за 100! и говорит, что сумма его цифр равна 666.
Любая помощь приветствуется, спасибо.
С числами, большими, вы действительно начинаете терять точность с помощью удвоений или любого вида представления с плавающей запятой. Вы имеете дело с огромным целым числом, поэтому вам нужна какая-то бесконечная целая библиотека. – Linuxios
Вы можете использовать [«GMP» - многоарифметическую библиотеку многоточечных вычислений GNU] (https://gmplib.org/manual/Number-Theoretic-Functions.html#Number-Theoretic-Functions) для чего-то подобного. – AGS
Ссылка на подход к этой проблеме: [найти сумму цифр в 100!] (Http://math.stackexchange.com/questions/451065/find-the-sum-of-the-digits-in-the-number -100) – rcgldr