Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Best_Coder
0 / 0 / 3
Регистрация: 18.09.2014
Сообщений: 81
#1

Программа вычисления больших значений факториалов - C++

28.11.2014, 09:58. Просмотров 399. Ответов 7
Метки нет (Все метки)

Нашёл интересную программу, которая может вычислять большие значения факториалов на pascale.Перевёл на C++ не работает.
Может кто подсказать где ошибка?
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <locale>
using namespace std;
 
const int N=300;
 
void main(){
        locale::global(locale("Rus"));
 
        int n,j(0),r(0),i(0),w(0);
       
        char quit;
 
        do{
                cout<<"Введите число факториал которого необходимо посчитать n= ";
                cin>>n;
 
                int A[300] = {0};
 
                for(int i(0);i<N;i++) A[i]=0;
 
                A[0]=1;
                A[1]=1;
                j=2;//Начальные присвоения начинается вычисление с 2!
 
                while(j<=n && A[0]<n){//Второе условие фиксирует факт выхода за пределы массива
                        r=0;i=1;
                                /*r - Перенос из разряда в разряд при выполнении числа j на очередную цифру A[i]
                                предыдущего результат*/
               
                        while(i<=A[0]|| r!=0){
                        /*Пока не пройдены все цифры предыдущего результата
                        или есть перенос цифры в старший разряд*/
 
                                w=A[i]*j*r; /*Умножение очередной цифры и прибавление
                                           цифры переноса из предыдущего разряда*/
                                A[i]=w%10;      /*Нахождение новой цифры с номером i*/
                                r=w/10;//Вычисление значения переноса
 
                                if (A[1]!=0) A[0]++; /*Изменение если необходимо,количества задействованных
                                элементов массива A,длины полученного результата*/
                                i++;
               
                        }
                j++;
                }
                for(int i(A[0]);i<=1;i--)//Вывод результата
                        cout<<A[i];
        }while(cin>>quit && quit=='y');
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2014, 09:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа вычисления больших значений факториалов (C++):

Поиск факториалов больших чисел
Здравствуйте. Подскажите пожалуйста. Как найти факториал: {10}^{3}, {10}^{4},...

Программа вычисления значений функции y= sin(x)
Доброго времени суток. У меня есть вот такая задачка: Написать программу...

программа вычисления наибольшего из значений функции
Мне дана такая задача: написать программу вычисления наибольшего из значений...

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

Программа для вычисления значений функции F(x) на отрезке [a,b] с шагом h (Dev-C++)
F(x)=7{sin}^{2}x-\frac{1}{2}cosx a, b, h - вводит пользователь. Результат...

Написать программу для вычисления суммы факториалов всех нечетных чисел от 1 до 9.
Помогите, пожалуйста, решить задачу в С++. Написать программу для вычисления...

7
R0man
Заблокирован
28.11.2014, 10:09 #2
C
1
2
for (int i = A[0]; i <= 1; i--)//Вывод результата
            cout << A[i];
У вас условие "выполнять пока i меньше либо равно единицы", и при этом выполняется уменьшение (декремент) переменной i. Цикл бесконечный выходит
1
Best_Coder
0 / 0 / 3
Регистрация: 18.09.2014
Сообщений: 81
28.11.2014, 10:17  [ТС] #3
Кликните здесь для просмотра всего текста
Pascal
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
Programm Task;
Const MaxN=300;
 
Type MyArray=Array[0..MaxN] of Integer;
Var A: MyArray[0..MaxN];
i,j,r,w,n : Integer;
 
Begin
FillChar(A,Sizeof(A),0);
WriteLn('Введите число факториала, которое необходимо посчитать :');
ReadLn(n)
A[0]:=1;A[1]:=1;j:=2;
While(j<=n) And (A[0]<MaxN) Do Begin
r:=0; i:=1;
While(i<=A[0]) Or (r<>0) Do Begin
w:= A[i]*j+r;
A[i]:=w mod 10;
r:= w Div 10;
 
if(A[A[0]+1])<>0 Then Inc(A[0]);
Inc(i);
End;
Inc(j);
End;
For i:=A[0] Downto 1 Do Write(A[i]);
WriteLn;
ReadLn;
End.


Добавлено через 2 минуты
У вас условие "выполнять пока i меньше либо равно единицы", и при этом выполняется уменьшение (декремент) переменной i. Цикл бесконечный выходит
спасибо исправил но программа всё равно не работает
0
Phil
Эксперт 1С
237 / 238 / 70
Регистрация: 28.05.2014
Сообщений: 890
28.11.2014, 11:26 #4
Best_Coder, а рабочий код на Pascale можно посмотреть?
0
Best_Coder
0 / 0 / 3
Регистрация: 18.09.2014
Сообщений: 81
28.11.2014, 11:33  [ТС] #5
Этот не работает?Сейчас ещё раз проверю я его из учебника списывал...но сам не проверял так как компилятора на паскале под рукой нет
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4372 / 2347 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
28.11.2014, 11:34 #6
Цитата Сообщение от Best_Coder Посмотреть сообщение
if (A[1]!=0) A[0]++;
Здесь скорее всего имелось в виду 'if (A[i] != 0)...'. Невнимательно преводили...

Умиляет, конечно, гениальная манера аккуратно завеси именованную константу 'const int N=300;', и потом все равно тупо объявлять массив как 'int A[300] = {0};'. Но в дальнейшем коде опять исправно используется 'N'....
0
Best_Coder
0 / 0 / 3
Регистрация: 18.09.2014
Сообщений: 81
28.11.2014, 11:38  [ТС] #7
кое чего подредактировал теперь точно как в учебнике
Pascal
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
Programm Task;
Const MaxN=300;
 
Type MyArray=Array[0..MaxN] of Integer;
Var A: MyArray[0..MaxN];
i,j,r,w,n : Integer;
 
Begin
FillChar(A,SizeOf(A),0);
WriteLn('Введите число факториала, которое необходимо посчитать :');
ReadLn(n)
A[0]:=1;A[1]:=1;j:=2;
While(j<=n) And (A[0]<MaxN) Do Begin
r:=0; i:=1;
While(i<=A[0]) Or (r<>0) Do Begin
w:= A[i]*j+r;
A[i]:=w Mod 10;
r:= w Div 10;
 
if A[A[0]+1]<>0 Then Inc(A[0]);
Inc(i);
End;
Inc(j);
End;
For i:=A[0] DownTo 1 Do Write(A[i]);
WriteLn;
ReadLn;
End.
Добавлено через 1 минуту
Не это всё правильно так в примере из учебника
Pascal
1
if A[A[0]+1]<>0 Then Inc(A[0]);
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4372 / 2347 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
28.11.2014, 11:41 #8
Еще одна бредятина видна в условии главного цикла 'while(j<=n && A[0]<n)'. Согласно комментарию (и здравому смыслу) тут должно быть 'A[0] < N'.

Также видно, что в паскалевском коде это условие написано правильно.

Добавлено через 1 минуту
Цитата Сообщение от Best_Coder Посмотреть сообщение
Не это всё правильно так в примере из учебника
Pascal
1
if A[A[0]+1]<>0 Then Inc(A[0]);
Это вы о чем? Каким это образом вы умудрились перевести такой паскалевский код в 'if (A[1]!=0) A[0]++;' ???
0
28.11.2014, 11:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2014, 11:41
Привет! Вот еще темы с решениями:

Написать программу, которая выводит значения факториалов чисел от 0 до N. Для вычисления факториала числа написать функцию пользователя
Написать программу, которая выводит значения факториалов чисел от 0 до N. Для...

Защита от ввода больших значений
Здравствуйте. Подскажите, как проверять ввод на слишком большие значения?...

Упорядочить строки матрицы по возрастанию значений самых больших элементов строк
Здравствуйте. Имеется задание: Дано действительную матрицу размером m x n....

Найти количество значений функций больших, чем значение аргумента, на заданном интервале с заданным шагом
Программа для табулирования функции на отрезке НАйти количество значений...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru