Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 20.01.2022
Сообщений: 20
1

2 в N степени, где N>=1000

11.10.2022, 21:09. Показов 1531. Ответов 19

Author24 — интернет-сервис помощи студентам
Нужно написать программу, которая будет вычислять 2N, где N>1000. Прошу дать направление и как нужно это сделать. Должно выводить целые числа, как в Python.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2022, 21:09
Ответы с готовыми решениями:

Какой тип данных может вместить 10 в 1000 степени
В одной задаче на вход поступает 10 в 1000 степени, какой тип данных может вместить или как можно...

Написать программу, которая делит числа в 5 степени на число в 14 степени и выводит ответ в 5 степени. Найти ошибку
Ребят, такая проблема, задание: Написать программу, которая делит числа в 5 степени на число в 14...

Нужно вычислить число а в степени b где b<1000!
Программёры!Помогите!Я чайник в С++! Нужно вычислить число а в степени b где b&lt;1000! Помогите...

вычислить 2 в 1000 степени
Помогите пожалуйста, никак непойму как это реализовать

19
Модератор
Эксперт С++
13701 / 10904 / 6472
Регистрация: 18.12.2011
Сообщений: 29,110
12.10.2022, 08:09 2
Лучший ответ Сообщение было отмечено Dazai1947 как решение

Решение

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
#include <iostream>
#include <string>
using namespace std;
string Mul2(string s) // ф-я умножения на 2 в "столбик"
{
    string res;
    char perenos=0;
    for(size_t i=s.size();i>0;i--)
    {
        char t=(s[i-1]-'0')*2+perenos; // получили умножение очередной цифры на 2 с учетом переноса
        perenos=t/10; // если больше 10, то перенос равен 1
        res.insert(res.begin(),t%10+'0'); // вставляем в начало строки очередную цифру результата
    }
    if(perenos)
        res.insert(res.begin(),'1');
    return res;
}
int main()
{
    string s2="2";
    int N=1001;
    for(int i=1;i<N;i++)
        s2=Mul2(s2);  //  N-1 раз умножаем на 2
    cout<<s2;
    cin.get();
    return 0;
}
3
Вездепух
Эксперт CЭксперт С++
12783 / 6662 / 1793
Регистрация: 18.10.2014
Сообщений: 16,849
12.10.2022, 10:18 3
Цитата Сообщение от Dazai1947 Посмотреть сообщение
Нужно написать программу, которая будет вычислять 2N, где N>1000.
Плавающие форматы IEEE754 будут представлять степени двойки точно. Для double - до степени 1023. Для расширенного 80-битного формата - до степени 32766.

C++
1
2
    long double p = std::pow(2.L, 1001);
    std::cout << std::fixed << std::setprecision(0) << p << std::endl;
2
0 / 0 / 0
Регистрация: 20.01.2022
Сообщений: 20
12.10.2022, 12:36  [ТС] 4
А можно как-то ускорить код? Потому что допустим 2^10000 вычисляет очень медленно
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
12.10.2022, 12:45 5
Цитата Сообщение от Dazai1947 Посмотреть сообщение
А можно как-то ускорить код? Потому что допустим 2^10000 вычисляет очень медленно
ну.... типа

double a,b;
b=1;
a=b<<N;
0
0 / 0 / 0
Регистрация: 20.01.2022
Сообщений: 20
12.10.2022, 12:47  [ТС] 6
Цитата Сообщение от SergP01 Посмотреть сообщение
ну.... типа

double a,b;
b=1;
a=b<<N;
Можете пояснить? Простите, если глупый вопрос, учусь
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
12.10.2022, 12:52 7
Цитата Сообщение от Dazai1947 Посмотреть сообщение
Можете пояснить? Простите, если глупый вопрос, учусь
вы просто делаете сдвиг 1 на нужную степень

2^1 0010;
2^2 0100;

и так далее
1
0 / 0 / 0
Регистрация: 20.01.2022
Сообщений: 20
12.10.2022, 12:58  [ТС] 8
Цитата Сообщение от SergP01 Посмотреть сообщение
вы просто делаете сдвиг 1 на нужную степень

2^1 0010;
2^2 0100;

и так далее
Понятно, спасибо
0
Модератор
Эксперт С++
13701 / 10904 / 6472
Регистрация: 18.12.2011
Сообщений: 29,110
12.10.2022, 13:51 9
Не уверен, что это быстрее.
Придется хранить бинарную длинную строку,
а потом переводить ее в десятичную систему,
выполняя аналогичные операции сложения и умножения в столбик.
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
12.10.2022, 14:48 10
Цитата Сообщение от zss Посмотреть сообщение
Придется хранить бинарную длинную строку,
а нафига нам строки хранить?
мы делаем операцию над числом... а потом его в строчном виде выводим

быстрее сдвига- ну никак не получится

Добавлено через 5 минут
это я для наглядности написал, чтобы понятно как единица в числе двигается
0001;
2^1 0010;
2^2 0100;
0
Модератор
Эксперт С++
13701 / 10904 / 6472
Регистрация: 18.12.2011
Сообщений: 29,110
12.10.2022, 14:48 11
Цитата Сообщение от SergP01 Посмотреть сообщение
операцию над числом
Число в разрядную сетку не поместиться.
Можно, конечно, специально для этого случая считать,
что N и является представлением числа 2N.
Но для результата в десятичной сс все равно придется завести длинную строку
и считать в столбик то же самое
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
12.10.2022, 16:14 12
Цитата Сообщение от zss Посмотреть сообщение
Число в разрядную сетку не поместиться.
согласен
больше 2^64 не влезет...
тогда или библиотеку для больших чисел цеплять...
или своё писать...

зы. а чего С++ до сих пор такой не обзавелся ?
0
3697 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
12.10.2022, 16:47 13
Цитата Сообщение от SergP01 Посмотреть сообщение
зы. а чего С++ до сих пор такой не обзавелся ?
Зачем ? Просто что бы было ?
Что бы еще больше дистрибутив раздувать ?

fixed point numbers никак не дождемся ... а вы тут про всякие глупости ...
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
12.10.2022, 18:00 14
Цитата Сообщение от SmallEvil Посмотреть сообщение
Зачем ? Просто что бы было ?
Что бы еще больше дистрибутив раздувать ?
да 100-200 метров никто и не заметит...
а вообще.... судя по размерам дистров... похоже что они каждый раз обёртки на обёртки делают....

эх... помню первый Мак ремонтировал..... вот народ писал... с дискеты окошки грузились... аля вынь3.1( наверное мелкомягкии с них слизали)....

а надо чтобы дети развлекались.... понятно, что по жизни такие числа нах никому не нужны
0
Вездепух
Эксперт CЭксперт С++
12783 / 6662 / 1793
Регистрация: 18.10.2014
Сообщений: 16,849
12.10.2022, 18:05 15
Цитата Сообщение от Dazai1947 Посмотреть сообщение
А можно как-то ускорить код? Потому что допустим 2^10000 вычисляет очень медленно
Пробуем

C++
1
2
3
4
5
6
7
8
9
#include <cmath>
#include <iomanip>
#include <iostream>
 
int main()
{
  long double p = std::pow(2.L, 10000);
  std::cout << std::fixed << std::setprecision(0) << p << std::endl;
}
http://coliru.stacked-crooked.... 3b6dcd7fc4

Вычисляется мгновенно.
1
Модератор
Эксперт С++
13701 / 10904 / 6472
Регистрация: 18.12.2011
Сообщений: 29,110
12.10.2022, 18:39 16
TheCalligrapher, А в VS2008 ответ: единица.....
0
Вездепух
Эксперт CЭксперт С++
12783 / 6662 / 1793
Регистрация: 18.10.2014
Сообщений: 16,849
12.10.2022, 19:03 17
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Цитата Сообщение от zss Посмотреть сообщение
А в VS2008 ответ: единица.....
Безобразие

А у меня в VS2017 получается inf, а не единица. Тоже, в принципе, неплохо.
0
0 / 0 / 0
Регистрация: 20.01.2022
Сообщений: 20
12.10.2022, 19:51  [ТС] 18
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Безобразие

А у меня в VS2017 получается inf, а не единица. Тоже, в принципе, неплохо.
В VS2022 тоже самое. Спасибо

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Пробуем

C++
1
2
3
4
5
6
7
8
9
#include <cmath>
#include <iomanip>
#include <iostream>
 
int main()
{
  long double p = std::pow(2.L, 10000);
  std::cout << std::fixed << std::setprecision(0) << p << std::endl;
}
http://coliru.stacked-crooked.... 3b6dcd7fc4

Вычисляется мгновенно.
А что 2.L значит в pow()?
0
Вездепух
Эксперт CЭксперт С++
12783 / 6662 / 1793
Регистрация: 18.10.2014
Сообщений: 16,849
12.10.2022, 19:59 19
Цитата Сообщение от Dazai1947 Посмотреть сообщение
А что 2.L значит в pow()?
Это не имеет никакого отношения к pow, как таковому.

2.L в С++ - это 2. с суффиксом L. Суффикс L для плавающего литерала означает тип long double.
1
0 / 0 / 0
Регистрация: 20.01.2022
Сообщений: 20
12.10.2022, 20:01  [ТС] 20
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это не имеет никакого отношения к pow, как таковому.

2.L в С++ - это 2. с суффиксом L. Суффикс L для плавающего литерала означает тип long double.
Хорошо, спасибо большое
0
12.10.2022, 20:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2022, 20:01
Помогаю со студенческими работами здесь

Вывести все степени числа 3, не превышающие 1000
1. Вывести все степени числа 3, не привышающие 1000

Вычисление хеш-функции (коэффициенты степени 1000+) и коллизии
Привет! Есть такая хеш-функция h(s) = (s1 * b^(n-1) + s2 * b^(n-2) + ... + s(n-1) * b + sn) mod...

задача, обратная нахождению степени числа, то есть по числу и основанию степени определить показатель степени
Напишите функцию degree_indicator(), принимающую число и основание степени. Функция возвращает...

Вывести на экран таблицу значений функции f(x)=x в 4 степени+3х в 3 степени +5х во второй степени+7 х=1,2..10
18. Вывести на экран таблицу значений функции f(x)=x в 4 степени+3х в 3 степени +5х во второй...

Дано целое число N (> 0). Найти сумму 1в N степени + 2 в степени N−1 + … + Nв 1 степени.
Дано целое число N (&gt; 0). Найти сумму 1в N степени + 2 в степени N−1 + … + Nв 1 степени....

Где найти проект на 1000 классов?
Подскажите, пожалуйста, проект на 1000 классов, который был бы написан на java. Просто мне в...

Доказать, что 7 в степени n умножить на 2 в степени 3k минус 2 в степени 2k кратное 47
Доказать что 7 в степени n умножить на 2 в степени 3k минус 2 в степени 2k кратное 47 Для набора...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru