Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Циклический оператор while! http://www.cyberforum.ru/cpp-beginners/thread1094326.html
Дано вещественное число а. Найти все значения n, при которых. Необходимо решить через While на примере вот этого: Найти сумму всех элементов последовательности: #include "stdafx.h" #include <conio.h> #include <stdio.h> void main()
C++ Каким образом лучше осуществить вывод массива с помощью графики? Добрый день! Имеется массив размера примерно 1000 на 500. Некоторые ячейки закрашенные, некоторые нет. Каким образом лучше осуществить вывод этого массива с помощью графики? А также можно какую-то литературу порекомендовать по графике в С++. http://www.cyberforum.ru/cpp-beginners/thread1094325.html
C++ Реализовать класс
Ребят, очень нужна помощь, помогите пожалуйста кто может, буду признателен! Информационная запись о файле в каталоге содержит поля: имя файла, расширение, дата и время создания, атрибуты "только чтение", "скрытый", "системный", размер файла на диске. Для моделирования каталога реализовать класс Directory, содержащий название родительского каталога, количество файлов в каталоге, список файлов в...
C++ Побитовые операции msb и lsb
Доброго дня, подскажите пожалуйста, как можно справиться со следующей задачей: есть некоторое сообщение, которое летает по CAN шине, примерно следующего формата: 121.112160___2___FD___Rxd___8___ 0D D2 1F 80 98 0B 00 00. Мне в нем интересны 4 и 5 байты, с соответствующими значениями 0x98 и 0x0B. Эти два байта характеризует один из параметров.
C++ Написать функции для работы с динамическим массивом http://www.cyberforum.ru/cpp-beginners/thread1094302.html
Дали вот эти задачи никак не могу решить, помогите. 1. Написать следующие функции для работы с динамическим массивом: a. Функция распределения динамической памяти. b. Функция инициализации динамического массива. c. Функция печати динамического массива. d. Функция удаления динамического массива. e. Функция добавления элемента в конец массива. f. Функция вставки элемента по указанному...
C++ Кто нибудь можете подсказать, есть ли вообще программы конверторы с языка c++ в паскаль Кто нибудь можете подсказать, есть ли вообще программы конверторы с языка c++ в паскаль подробнее

Показать сообщение отдельно
SuperSven
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 3

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

11.02.2014, 17:44. Просмотров 236. Ответов 1
Метки (Все метки)

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

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 получается некорректный? И вывод какой-то мудреный. Заранее благодарю за ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru