|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.01.2011, 09:57 | #1 |
Регистрация: 26.04.2010
Сообщений: 9
|
Не понятно, как вычисляется факториал в программе (С++)
Вот такой код для вычисления факториала числа:
#include<iostream> #include<math.h> #include <clocale> using namespace std; int factorial (int x); int main () { setlocale (LC_CTYPE, "Russian"); int n; while (1) { cout << "Введите число, факториал которого необходимо вычислить \n"; cin >> n; cout << "Факториал введенного числа равняется: " << factorial (n)<< endl; } return 0; } int factorial (int n) { int i, fact; fact = 1; for (i=1; i <= n; i++) fact *= i; return fact; } До значения n=32 результат факториала похож на правду. Но при n=32 - результат становится отрицательным... а при n=34 - вообще результат = 0. В чем заноза, подскажите пожалуйста? |
26.01.2011, 10:02 | #2 |
:D
Форумчанин
Регистрация: 26.09.2010
Сообщений: 570
|
а сколько показывает при n=32 ? наверняка больше 32767 ) измените с int на long int, все будет нормально )
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery |
26.01.2011, 10:19 | #3 |
Регистрация: 26.04.2010
Сообщений: 9
|
Позаменял все int - ы... Ничего не изменилось... а при значении n=32 факториал по данной программе равен "- 2147483648"
#include<iostream> #include<math.h> #include <clocale> using namespace std; long int factorial (long int x); long int main () { setlocale (LC_CTYPE, "Russian"); long int n; while (1) { cout << "Введите число, факториал которого необходимо вычислить \n"; cin >> n; cout << "Факториал введенного числа равняется: " << factorial (n)<< endl; } return 0; } long int factorial (long int n) { long int i, fact; fact = 1; for (i=1; i <= n; i++) fact *= i; return fact; } |
26.01.2011, 12:53 | #4 |
:D
Форумчанин
Регистрация: 26.09.2010
Сообщений: 570
|
а, все ясно, итак, смотри
переменная int занимает 2 байта, это 16 бит 1111 1111 1111 1111, или 65535 (unsigned int) в десятичной,идем дальше переменная long занимает в памяти 4 байта, 32 бита, 1111 1111 1111 1111 1111 1111 1111 1111 - это 4294967295 (unsigned long), если же посчитать на калькуляторе виндовс, засунув туда число в 8 байт и посчитав факториал от 32, мы получаем 2,024083361028411770517061632 * 10^34, как ты думаешь, уместится такое число в 4 байта ? используй тип данных long double - это 10 байт Код:
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery Последний раз редактировалось kaljan775; 26.01.2011 в 12:55. |
26.01.2011, 13:07 | #5 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
sizeof(long double) = 12
Код:
Последний раз редактировалось NiCola999; 26.01.2011 в 13:10. |
26.01.2011, 13:17 | #6 |
:D
Форумчанин
Регистрация: 26.09.2010
Сообщений: 570
|
круто, еще раз удостоверяюсь что не стоит верить интернету на 100% и стоит все перепроверять
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery |
26.01.2011, 13:29 | #7 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
зависит от архитектуры, это на 32
|
26.01.2011, 13:44 | #8 |
:D
Форумчанин
Регистрация: 26.09.2010
Сообщений: 570
|
благодарю за объяснение
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery |
26.01.2011, 14:19 | #9 |
Регистрация: 26.04.2010
Сообщений: 9
|
Тээксс... Понятно... Благодарен вам за вразумительные ответы!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Элементы массива a(n) вычисляется по правилу... | om3n | Помощь студентам | 2 | 20.06.2010 15:30 |
Не понятно. Как это сделано | kzld | Microsoft Office Excel | 2 | 31.03.2010 11:24 |
объясните просто и понятно, как составить программу на BASIC | mmarina80 | Помощь студентам | 5 | 03.01.2010 18:10 |
Не понятно, как создавать таблицы в CSS. | Ulan | HTML и CSS | 4 | 17.07.2008 16:18 |
Ассемблер. Факториал числа. Коментарии к программе | Irwin | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 03.05.2007 13:52 |