Я написал код, который вычисляет факториал после создания функции myFactorial, однако я испортил его, когда пытался обработать большие числа.Длительная обработка формата при вычислении факториала
Я пытаюсь иметь дело с цифрами выше 16, используя длинный формат, но результаты не имеют значения, и во второй части кода ситуация становится более странной. Хотя результаты не должны меняться при вводе, они меняются!
Я разделяю мой код с комментариями ниже:
main.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int yourNumber;
int i;
//Take the input
printf("I highly recommend you to make the command window fullscreen. Otherwise, the complete output will not be seen.\n");
printf("Enter a positive integer and I will tell you its factorial.\n");
scanf("%d", &yourNumber);
//Calculate factorial and print it in three ways
printf("Factorial of %d is %d!\n",yourNumber,myFactorial(yourNumber));
printf("Using long format, factorial of %d is %lld!\n",yourNumber,myFactorial(yourNumber));
printf("In hex: %#08X!",myFactorial(yourNumber));
// Here on, second part of my code begins
// Calculate and print factorials of numbers from 1 to 20 in %d format
printf("\n\n\nLet's see more d's!\n\n");
for (i = 1; i<21; i++) printf("%d\n", myFactorial(i));
// Calculate and print factorials of numbers from 1 to 20 in %lld format
printf("\n\n\nNow let's see more lld's!\n\n");
for (i = 1; i<21; i++) printf("%lld\n", myFactorial(i));
return 0;
}
myfactorial.c
#include <stdio.h>
long long int myFactorial(int bar) {
long long out = 1;
int i;
for (i=1; i<=bar; i++)
{
out *= i;
}
return out;
}
Не могли бы вы рассказать о проблеме, с которой вы столкнулись? Факториал корректен: http://cpp.sh/8twwh –
Привет, использование длинного длинного также приведет к переполнению большого диапазона. если вы действительно хотели научиться пройти через это. http://www.geeksforgeeks.org/factorial-large-number/ or https://discuss.codechef.com/questions/7349/computing-factorials-of-a-huge-number-in-cc- а-учебник –