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

найти факториал числа... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Лишние символы при копирование текстового файла http://www.cyberforum.ru/cpp-beginners/thread167171.html
не могу понять почему при копировании текстового файла у меня вставляются в конец куча лишних символов, причем чем больше файл тем больше будет символов, например я пытаюсь скопировать: ....города, поспешившей туда на шум. Когда привели его к начальнику, немедленно подвергли пытке, как человека, которого все считали негоднейшим, и он сознался, что проник в дом ростовщиков с целью воровства,...
C++ Числа от 1 до 100 Задание: Вывести числа от 1 до 100,и что бы рядом с каждым числом было написано четное оно или нечетное например 1 нечет 2 чет 3 нечет и т.д кое что сделал,но работает не совсем правильно,помогите исправить пожалуйста,заранее благодарен!ЗЫ главное требование забыл,использовать нужно только if или do while #include <stdio.h> void main() http://www.cyberforum.ru/cpp-beginners/thread167170.html
C++ Создание и обработка файлов
1. Составить программу, которая создает файл и записывает в него 5 введённых пользователем целых чисел. Причем каждое число должно находиться в отдельной строке. 2. Составить программу, которая дописывает в файл из 1 задания пять целых чисел, получаемых с помощью датчика случайных чисел, и выводит на экран его содержимое. 3. Составить программу, которая в файле, сформированном программой из...
Найти наименьшее из трех чисел C++
Суть задания найти наименьшее из трех чисел.Выводит только когда наименьшее либо первое либо третье,а когда второе не выводит ни чего. Помогите исправить ошибку,заранее благодарен! #include <stdio.h> void main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a < b) {
C++ Решение http://www.cyberforum.ru/cpp-beginners/thread167126.html
С учетом действительных чисел, B, C. Двойной каждый номер, если выполняется неравенство: а <= B <= с. Изменение каждого номера, чтобы это абсолютная ценность, в противном случае. Для каждого теста, выход, B, C. Подсказка: Используйте функцию из фабрик math.h библиотеки. Пример: Вход: 3.1 4.1 5.1 Выход 6.2 8.2
C++ Високосный год Даны три натуральных числа a, b, c представляющих день месяц и год. Для примера 1, 4, 1991 представляет 1-ое апреля 1991 года. Вывести три числа, представляющие следующую дату. Пример: ввод: 1 4 1991 вывод: 2 4 1991 подробнее

Показать сообщение отдельно
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
20.09.2010, 14:11     найти факториал числа...
Вот

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "Factorial.h"
int main()
{
    setlocale(LC_ALL, "Russian");
    
    Factorial *factorial = new Factorial();
    int fact;
 
    std::cout<<"Введите факториал:\n> ";
    std::cin>>fact;
    
    factorial->WriteFactorial(fact);
    std::cout<<"Количество нулей:\n< "<<factorial->CountZero()<<std::endl;
    
    delete factorial;
    system("pause");
    return EXIT_SUCCESS;
}
factorial.h
C++
1
2
3
4
5
6
7
8
9
10
11
class Factorial
{
public:
    void WriteFactorial(int);
    int CountZero();
protected:
private:
    void _Factorial(int);
    static const int n = 15000000;
    int mas[n];
};
factorial.cpp
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <fstream>
#include "factorial.h"
 
void Factorial::_Factorial(int factorial)
{
    int fact, i, zero = n - 1, index = n - 1;
    for(i = 0; i < n - 1; ++i)
        mas[i] = 0;
    mas[n - 1] = 1;
    for (fact = 2; fact <= factorial; ++fact)
    {
        while (mas[zero] == 0) --zero;
        for (i = zero; i >= index; --i)
            mas[i] *= fact;
        for (i = zero; i > index; --i)
            if (mas[i] >= 1000)
            {
                mas[i - 1] += mas[i] / 1000;
                mas[i] %= 1000;
            }
        if (mas[index] >= 1000)
        {
            mas[index - 1] += mas[index] / 1000;
            mas[index] %= 1000;
            index--;
            if (mas[index] >= 1000)
            {
                mas[index - 1] += mas[index] / 1000;
                mas[index] %= 1000;
                index--;
                if (mas[index] >= 1000)
                {
                    mas[index - 1] += mas[index] / 1000;
                    mas[index] %= 1000;
                }
            }
        } 
    }
}
 
void Factorial::WriteFactorial(int factorial)
{
    _Factorial(factorial);
    int i = 0;
    while (mas[i++] == 0);
    std::ofstream out("factorial.txt", std::ios::out);
    for (i -= 1; i < n; ++i)
    {
        if (mas[i] >= 100)
            out<<mas[i];
        else
            if (mas[i] < 10)
                out<<"00"<<mas[i];
            else
                out<<"0"<<mas[i];
    }
}
 
int Factorial::CountZero()
{
    int i = n - 1, count = 0;
    while(mas[i] == 0) --i;
    count = (n - i - 1) * 3;
 
    if(!(mas[i] % 100))
        return count + 2;
    else
        if(!(mas[i] % 10))
            return count + 1;
    return count;
}
 
Текущее время: 03:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru