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

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

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

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

05.01.2010, 20:34. Просмотров 2626. Ответов 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 минуты
отзовитесь кто-то!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2010, 20:34     Длинная арифметика
Посмотрите здесь:

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

Длинная арифметика - C++
Привет всем! помогите пожалуйста кодом. Необходимо реализовать операцию сравнения двух длинных чисел A&gt;=B Заранее спасибо

Длинная арифметика - C++
Мне дали задание с вычеслениями длинной арифметики. С мысл в том что там все действия происходят с символьными масивами. Я так и не...

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

Длинная арифметика - C++
Здравствуйте! Есть задание: Составить программу для вычисления числа: (2^64) - 1. В результате сохранить все цифры. 2^64 - это 2...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 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;
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; почему со второго элемента начинается массив?
valeriikozlov
Эксперт C++
4669 / 2495 / 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;
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 21:44     Длинная арифметика #5
Цитата Сообщение от TanT
помоему всё правильно у человека, тока он с порядком обшибся
да, у меня алгоритм для вывода двоичной записи, я чо-то не подумал
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
05.01.2010, 21:44     Длинная арифметика #6
может я что то не понял но разве не так?
C++
1
2^200
accept
4821 / 3241 / 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 минуту
пробел в числе это не я
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
05.01.2010, 22:00     Длинная арифметика #8
Цитата Сообщение от accept Посмотреть сообщение
МедведЪ, 16069380442589902755419620923411626025222029937827 92835301376
как О_О а настоящий ответ какой
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
05.01.2010, 22:03     Длинная арифметика #9
В смысле? accept тебе и привел полный ответ: это и есть 2^200.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 22:04     Длинная арифметика #10
ну, это и есть настоящий с калькулятора, форум только число поделил на две части
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
05.01.2010, 22:08     Длинная арифметика #11
accept, если это настоящий ответ то есть 2^200 но причем тут коды первого поста?что то большой код
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.01.2010, 22:13     Длинная арифметика #12
а вообще, алгоритм классный, помог мне понять как сделать задачу, которую я тут не мог сделать давно

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

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


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

Добавлено через 30 секунд
accept, тогда где массив из 200?
accept
4821 / 3241 / 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
а почему там нулей нет дальше, я не знаю (видимо, из-за хранения чисел в компе)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2010, 22:22     Длинная арифметика
Еще ссылки по теме:

Длинная арифметика - C++
Как сделать типы длинных чисел, например, знаковое 256-ти битное целое и 256-ти битное вещественное с 224-х битной мантиссой и 32-х битным...

Длинная арифметика - C++
Всем привет! Хотелось бы узнать -- есть ли в С++ библиотека, где реализованы операции над длинными числами?

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

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

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


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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
05.01.2010, 22:22     Длинная арифметика #15
Yandex
Объявления
05.01.2010, 22:22     Длинная арифметика
Ответ Создать тему
Опции темы

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