Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 3
1

Разбор алгоритма программы

11.02.2014, 17:52. Показов 524. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, у меня есть программа, вычисляющая факториал заданного числа.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <iostream>
 
 
 
using namespace std;
int a[1000],i,n,j,ost=0,num=1,c;
 
int main(){
    cin>>n;
    memset(a,0,sizeof(a));
    if(n==0 || n==1) {cout<<1; return 0;}
    a[0]=1;
    for(i=2;i<=n;i++){
        for(j=0;j<num;j++){
            c=(a[j]*i+ost);
            a[j]=c%1000;
            ost=c/1000;
 
        }
        a[num]=ost%1000;
        ost/=1000;
        a[num+1]=ost%1000;
        ost/=1000;
        a[num+2]=ost;
        ost=0;
        if(a[num+1]!=0)num+=2;
        else if(a[num]!=0)num++;
    
    }
    cout<<a[num-1];
    for(i=num-2;i>=0;i--) {
        if(a[i]>99) cout<<a[i];
        else {
            if (a[i]>9) {cout<<0<<a[i];}
            else cout<<'0'<<'0'<<a[i];
        }
    }
return 0;
}
Помогите разобраться с алгоритмом. Сначала все понятно, идет обычное вычисление факториала. Но если результат получается больше 1000, то он получается некорректный. Для исправления этого и написана эта часть:
Кликните здесь для просмотра всего текста
a[num]=ost%1000;
ost/=1000;
a[num+1]=ost%1000;
ost/=1000;
a[num+2]=ost;
ost=0;
if(a[num+1]!=0)num+=2;
else if(a[num]!=0)num++;

Но я не совсем понимаю, как она работает. И почему результат свыше 1000 получается некорректный? И вывод какой-то мудреный. Заранее благодарю за ответы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2014, 17:52
Ответы с готовыми решениями:

Разбор алгоритма программы
Здравствуйте, у меня есть программа, вычисляющая факториал заданного числа. #include...

Разбор алгоритма
Пожалуйста поясните метод сжатия LZMA. Только пожалуйста не надо кидать ссылки на википедию.

Разбор программы
#include&lt;iostream&gt; using namespace std; void func1(); void func2(); int f; int main()...

Разбор программы
После недели освоения cuda и разбора программ,наткнулся на урок по куда,прилагается программа...

2
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
11.02.2014, 18:06 2
Вот так обычно ищут факториал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
unsigned long long fact(int n)
{
      if(n < 0) 
        return 0; 
      if (n == 0 || n == 1) 
        return 1; 
      else 
        return n * fact(n - 1); 
}
 
int main()
{
  std::cout << fact(20) << std::endl;
  
  system("PAUSE");
  return 0;
}
И почему результат свыше 1000 получается некорректный?
потому что число которое получается очень большое.(посмотрите пример с факт(20)) и видимо кто то пытался разбить это число на меньшие и сохранить в массиве.
Вопрос: вам дали задание найти факториал 1000 ?, если нет не заморачивайтесь.
1
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 3
11.02.2014, 18:12  [ТС] 3
Цитата Сообщение от egor2116 Посмотреть сообщение
Вопрос: вам дали задание найти факториал 1000 ?, если нет не заморачивайтесь.
Нет, вы немного не так поняли, 1000 это не сам факториал, а результат его. Например факториал 6 = 720, этот результат программа нормально выводит, а вот если уже 7 = 5040, то значения неверные получаются без того куска.
Мне дали задание просто описать алгоритм.
0
11.02.2014, 18:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2014, 18:12
Помогаю со студенческими работами здесь

разбор программы
Друг написал прогу, но комментарии к ней не сделал, поэтому не понятно. Помогите разобраться с...

разбор программы
друзья хотел бы попросить помощи с одной программой, в программировании не разбираюсь по єтому...

Разбор кода программы
сделали контрольную и защитить не не могу. помогите разобрать что значит код, пожалуйста....

Разбор программы(сортировка)
Как объяснить принцип работы (выделенного) кода. Не могу до конца разобрать какие действия...

Разбор кода программы
Здравствуйте! Помогите пожалуйста написать программу (на Bison+Flex), которая будет сканировать...

Разбор программы.Обработка текста
Помогите пожалуйста разобраться в программе Надо разобрать каждую строку int N,o; string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru