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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
#1

Длинная арифметика - C++

05.01.2010, 20:34. Просмотров 2634. Ответов 29

Помогите пожалуйста дорешать программу, она считает 2 в 200 степени, я коечто написал, но препод сказал, что прога выдаёт не полное число, помогите, или подскажите как переделать этот код:
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
#include<iostream>
 
int main()
{
        int const dimm =60;//60 магическое число, ага.(2^200=1.xxx*10^60)
        int base = 10;// можно любую, с 10 проще ввод-вывод организовывать.
        int a[dimm];
        for(int i=0;i<dimm;i++) a[i]=0;
        
        a[1]=1;
        for(int i=1;i<=200;i++)
        {
                for(int j=0;j<dimm;j++) a[j]*=2;// чтоб не париться, умножаем всё
                for(int j=0;j<dimm-1;j++)
                        if(a[j]>=base) //проверка на перенос
                        { 
                                        a[j+1] +=(a[j]-a[j]%base)/base;//перенос в старший разряд       
                                        a[j] =a[j]%base;
                        }
        }
        printf("2^200 = ");
        for (int i=dimm-1;i>=0;i--) printf("%u",a[i]);
        printf("\n  ");system("pause");
        return 0;
}
Добавлено через 1 час 4 минуты
отзовитесь кто-то!!!
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2010, 20:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длинная арифметика (C++):

Длинная арифметика - C++
Ребята,объясните как решить задачу , напишите хоть часть кода. Пусть даны числа a , b . Найти a+b, если a и b не больше чем 10 в...

Длинная арифметика - C++
:senor: Здраствуйте, пишу модуль длинной математики. В принципе, работоспособность у него положительная. Но в силу моей неопытности меня...

Длинная арифметика - C++
Вот условие задачи: Во время исследований, посвященных появлению жизни на планете Олимпия, учеными было сделано несколько сенсационных...

Длинная арифметика - C++
Здравствуйте помогите пожалуйста с задачкой на с++ борландс :wall: 1. &quot;Вычислить точное значение (n!)! &quot; 2. &quot;Для заданной...

Длинная арифметика - C++
Всем доброго вечера. Нужна помощь в решении задачи. Составить программу для вычисления числа: 2^64-1. В результате сохранить все...

Длинная арифметика N+1 - C++
Помогите плиз. Вводится n. Вывести N+1. Ограничений нет. Я понимаю что надо ввести массив и читать каждый символ. Оставшиеся елементы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 21:11 #2
2^5 = 1*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 0*2^0

то есть тебе реально нужно только нули и еденицы записать в массив
потом просто их вывести в обратном порядке
а для числа 2^200 будет вообще: идут одни нули, а n[200] = 1;
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
05.01.2010, 21:15 #3
Цитата Сообщение от accept Посмотреть сообщение
2^5 = 1*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 0*2^0

то есть тебе реально нужно только нули и еденицы записать в массив
потом просто их вывести в обратном порядке
а для числа 2^200 будет вообще: идут одни нули, а n[200] = 1;
помоему всё правильно у человека, тока он с порядком обшибся
Shevva, попробуй int const dimm =70; сделать и посмотреть что станет, будет 8м нулей, то есть при 60 два значащих числа ты глотаешь

хотя нет, там странно получается

вот это смутило a[1]=1; почему со второго элемента начинается массив?
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.01.2010, 21:26 #4
Самая главная ошибка в коде - строка 10:
Цитата Сообщение от Shevva Посмотреть сообщение
a[1]=1;
За счет этой строки с правой стороны правильного ответа добавляется 0.
Кроме того (хотя ошибки здесь нет), можно строку 17:
Цитата Сообщение от Shevva Посмотреть сообщение
a[j+1] +=(a[j]-a[j]%base)/base;
переписать так:
C
1
a[j+1] +=a[j]/base;
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 21:44 #5
Цитата Сообщение от TanT
помоему всё правильно у человека, тока он с порядком обшибся
да, у меня алгоритм для вывода двоичной записи, я чо-то не подумал
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
05.01.2010, 21:44 #6
может я что то не понял но разве не так?
C++
1
2^200
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 21:59 #7
1.60693804426e+60
это 61 элемент

Добавлено через 2 минуты
C++
1
for(int i=1;i<=200;i++)
обычно выглядит так

C++
1
for(int i = 0; i < 200; i++)
Добавлено через 37 секунд
МедведЪ, 1606938044258990275541962092341162602522202993782792835301376

Добавлено через 1 минуту
пробел в числе это не я
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
05.01.2010, 22:00 #8
Цитата Сообщение от accept Посмотреть сообщение
МедведЪ, 16069380442589902755419620923411626025222029937827 92835301376
как О_О а настоящий ответ какой
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
05.01.2010, 22:03 #9
В смысле? accept тебе и привел полный ответ: это и есть 2^200.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 22:04 #10
ну, это и есть настоящий с калькулятора, форум только число поделил на две части
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
05.01.2010, 22:08 #11
accept, если это настоящий ответ то есть 2^200 но причем тут коды первого поста?что то большой код
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 22:13 #12
а вообще, алгоритм классный, помог мне понять как сделать задачу, которую я тут не мог сделать давно

Добавлено через 1 минуту
МедведЪ, а он его в массиве накапливает, все эти цифры являются отдельными элементами в одном массиве

Добавлено через 1 минуту
то есть сам алгоритм даёт возможность посчитать любое число, равное степени двойки до двухсотой степени, включая и двухсотую степень
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
05.01.2010, 22:14 #13
Цитата Сообщение от accept Посмотреть сообщение
МедведЪ, а он его в массиве накапливает, все эти цифры являются отдельными элементами в одном массиве


Добавлено через 21 секунду
accept, ааа...

Добавлено через 30 секунд
accept, тогда где массив из 200?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 22:21 #14
в том-то и прикол, что хватает массива из 61, потому что число 2^200 - это 1.60693804426e+60 в десятичной системе

Добавлено через 3 минуты
то есть ты шестидесятку превращаешь в 10^60 степени и вот это число 1.60693804426 умножаешь на 10^60
а почему там нулей нет дальше, я не знаю (видимо, из-за хранения чисел в компе)
1
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
05.01.2010, 22:22 #15
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2010, 22:22
Привет! Вот еще темы с ответами:

Длинная арифметика. - C++
Даны два длинных числа a и b. Найти частное и остаток при делении числа a на b. Не могу реализовать деление отрицательных чисел. Помогите...

Длинная арифметика - C++
Поодскажите какую-нибудь библиотеку, где реализована работа со знаковыми целыми числами произвольной длины.

Длинная арифметика - C++
Помогите реализовать длинную арифметику #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main(){ int a; string...

Длинная арифметика - C++
Срочно нужны исходники (функции): 1. Перевод обычного числа в длинное (массив, строка , вектор кто с чем работает) 2. Нахождение суммы...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.01.2010, 22:22
Ответ Создать тему
Опции темы

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