Факториал больше 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, указывая, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д