Факториал больше 26 вычисляется неправильно - C (СИ)
Формулировка задачи:
Здравствуйте! Возникла такая проблема: необходимо написать программу на языке C, вычисляющую факториал числа, пробовал с помощью рекурсии, но факториал больше 26 она считает неправильно, помогите пожалуйста, люди добрые
Решение задачи: «Факториал больше 26 вычисляется неправильно»
textual
Листинг программы
int main(int argc, char *argv[])
{
int l,i,n,x,y; //n - ââîäèìîå ÷èñëî, x - ïåðåГ*îñ, y - äëÿ ïðîìåæóòî÷Г*îãî âû÷èñëåГ*ГЁГї
char k[100000]=""; //2568 Г*Г* 1000 , 1000000 Г*Г* ~25000
int was;
setlocale(LC_ALL,"Russian_russia.1251");
printf("Ââåäèòå ÷èñëî:");
scanf("%d",&n);
k[99999]=1;
for(l=2;l<=n;l++)
for(x=0,i=99999;i>-1;i--)
{
y=k[i]*l+x; //ГіГ¬Г*îæГ*ГҐГ¬ i-Гѕ öèôðó Г*Г* ÷èñëî îò 2 äî n
k[i]=y%10; //Г§Г*ïèñûâГ*ГҐГ¬ îñòГ*òîê
x=y/10; //Г* ГЅГІГ® "Гў óìå", ГІ.ГҐ. ïåðåГ*îñ Гў ñëåäóþùèé Г°Г*çðÿä
}
for(l=was=i=0;i<100000;i++)//âûâîäèì ÷èñëî ïî 75 öèôð â ñòðîêå
{
if(l%75==0 && l>0 && was)printf("\n");
if(k[i]>0 || was)
{
printf("%d",k[i]);
was=1;
l++;
}
}
printf("\n%d Г¶ГЁГґГ°\n",l);
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные: l, i, n, x, y - для вычисления факториала; k - для хранения разрядов числа; was - для контроля печати;
- Установлена локальная настройка на русский язык;
- Пользователю предлагается ввести число n для вычисления факториала;
- В массиве k[100000] выделяется 99999 символов для хранения разрядов числа, а k[99999] = 1;
- Используется два вложенных цикла для вычисления факториала. Внешний цикл выполняется от 2 до n. Внутренний цикл выполняет вычисления для каждого разряда числа. Значение y = k[i]*l+x; используется для вычисления следующего разряда числа. Значение k[i] = y%10; используется для хранения следующего разряда числа. Значение x = y/10; используется для вычисления следующего разряда числа.
- Используется еще один цикл для печати числа, используя значение l как счетчик. Если l%75 = 0, то печатается символ новой строки. Если k[i] > 0, то печатается значение k[i]. Если was = 1, то печатается символ новой строки. l увеличивается на 1.
- В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.
- Возвращается 0, указывая, что программа успешно завершилась.