Факториал больше 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;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены переменные: l, i, n, x, y - для вычисления факториала; k - для хранения разрядов числа; was - для контроля печати;
  2. Установлена локальная настройка на русский язык;
  3. Пользователю предлагается ввести число n для вычисления факториала;
  4. В массиве k[100000] выделяется 99999 символов для хранения разрядов числа, а k[99999] = 1;
  5. Используется два вложенных цикла для вычисления факториала. Внешний цикл выполняется от 2 до n. Внутренний цикл выполняет вычисления для каждого разряда числа. Значение y = k[i]*l+x; используется для вычисления следующего разряда числа. Значение k[i] = y%10; используется для хранения следующего разряда числа. Значение x = y/10; используется для вычисления следующего разряда числа.
  6. Используется еще один цикл для печати числа, используя значение l как счетчик. Если l%75 = 0, то печатается символ новой строки. Если k[i] > 0, то печатается значение k[i]. Если was = 1, то печатается символ новой строки. l увеличивается на 1.
  7. В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.
  8. Возвращается 0, указывая, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.714 из 5
Похожие ответы