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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Gae4ka_1
3 / 3 / 0
Регистрация: 19.10.2009
Сообщений: 28
#1

Вычисление 2^n, где n<=10000 - C++

24.10.2009, 16:26. Просмотров 2856. Ответов 18
Метки нет (Все метки)

Всем привет!
У меня такое задание:
Написать програму на С которая вычистяет 2 в степени n, при чем n <=10 000 и n натеральное!

Зарание спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2009, 16:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление 2^n, где n<=10000 (C++):

Вычисление НОД. не могу понять где ошибка. - C++
#include &quot;stdio.h&quot; #include &quot;conio.h&quot; int NOD (int x,int y) { while (x!=y) { if (x&gt;y) {x==x-y;}; if (y&gt;x) {x==y-x;}; ...

простые числа от 1 до 10000 - C++
Написать программу, которая выводит на экран все простые числа в диапазоне от 1 до 10000 и находит их количество.

Строка в 10000 символов - C++
Возможно ли создать такую строку? Если возможно, то как?

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

Дано Натуральное число N(N<10000) - C++
Определить, верно ли, что все 4 цифры этого числа различны, как, например, у чисел 1234, 0541.

Палиндром в интервале от 10000 до 99999 - C++
Задание: Напишите программу проверки, является ли введенное число палиндромом. Организуйте многократный ввод чисел для проверки, признак...

18
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
24.10.2009, 16:32 #2
тебе необходимо использовать длинную арифметику
заводишь массив char* на примерно 10 000 элементов и с помощь цикла считаешь, вычисление по времени выйдет около 1 сек без этого никак ибо самое большое число это 2 в 64 степени
1
Gae4ka_1
3 / 3 / 0
Регистрация: 19.10.2009
Сообщений: 28
24.10.2009, 17:12  [ТС] #3
я понимаю... но если можно ссылку с примером...
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
24.10.2009, 21:31 #4
В си как таковой логической функции вычисления степени не существует, но можно использовать основное логарифмическое тождество:

a^n на си выглядит так

C++
1
exp(a*log(n));
при этом нужно обязательно подключить библиотеку math.h

Добавлено через 1 час 58 минут
Цитата Сообщение от Gae4ka_1 Посмотреть сообщение
Всем привет!
У меня такое задание:
Написать програму на С которая вычистяет 2 в степени n, при чем n <=10 000 и n натеральное!

Зарание спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
setlocale(LC_ALL, "Russian");
int n;
cout<<"Введите значение показателя степени для основания 2: ";
cin>>n;
while(n>10000)
{
cout<<"Значение показателя степени не должно превышать 10000"<<endl;
cout<<"Введите значение показателя степени для основания 2: ";
cin>>n;
}
double a = exp(n*log(double(2)));
cout<<"Значение 2 в степени "<<n<<" = "<<a<<""<<endl;
}
Добавлено через 1 час 10 минут
Цитата Сообщение от Gae4ka_1 Посмотреть сообщение
Всем привет!
n <=10 000 и n натеральное!
Зарание спасибо!
представь себе 2 в 10000 степени - такого числа даже long double не знает)
1
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
24.10.2009, 22:01 #5
Ну, это проблема long double
Gae4ka_1,используй т.н. "длинную арифметику", и все получится! Например, http://gmplib.org/
Ну или любую другую реализацию. Возможно, эту самую реализацию тебе нужно написать самостоятельно; во всяком случае, имеющиеся в Инете исходники - хорошая отправная точка для самостоятельной работы.

Чтобы было легче искать ошибки, вот конечный результат:
2 в степени 10000 =
1995063116880758384883742162683585083823496831886192454852008949852943883022194663191996168403619459
7899331129423209124271556491349413781117593785932096323957855730046793794526765246551266059895520550
0869181933115425086084606181046855090748660896248880904898948380092539416332578506215683094739025569
1238806522509664387444104675987162698545322286853816169431577562964076283688076073222853509164147618
3956381458969463899410840960536267821064621427333394036525565649530603142680234969400335934316651459
2977732796657756061725820314079941981796073782456837622800373028854872519008344645814546505579296014
1483392161573458813925709537976911927780082695773567444412306201875783632550272832378927071037380286
6393031428133241401624195671690574061419654342324638801248856147305207431992259611796250130992860241
7083408076059323201612684922884962558413128440615367389514871142563151110897455142033138202029316409
5759646475601040584584156607204496286701651506192063100418642227590867090057460641785695191145605506
8251250406007519842261898059237118054444788072906395242548339221982707404473162376760846613033778706
0398034131971334936546227005631699374555082417809728109832913144035718775247685098572769379264332215
9939987688666080836883783802764328277517227365757274478411229438973381086160742325329197481312019760
4178281965697475898164531258434135959862784130128185406283476649088690521047580882615823961985770122
4070443305830758690393196046034049731565832086721059133009037528234155397453943977152574552905102123
1094732161075347482574077527398634829849834075693795564663862187456949927901657210370136443313581721
4311791398222983845847334440270964182851005072927748364550578634501100852987812389473928699540834346
1588070439591189858151457791771436196987281314594837832020814749821718580113890712282509058268174362
2057747592141765371568772561490458290499246102863008153558330813010198767585623434353895540917562340
0844887526162643568648833519463720377293240094456246923254350400678027273837755376406726898636241037
4914109667185570507590981002467898801782719259533812824219540283027594084489550146766683896979968862
4163631337639390337345580140763674187771105538422573949911018646821969658165148513049422236994771476
3069155468217682876200362777257723781365331611196811280792669481887201298643660768551639860534602297
8715575179473852463694469230878942659482170080511203223654962881690357391213683383935917564187338505
1097027161391543959099159815465441733631165693603112224993796999922678173235802311186264457529913575
8175008199839236284615249881088960232244362173771618086357015468484058622329792853875623486556440536
9626220189635710288123615675125433383032700290976686505685571575055167275188991941297113376901499161
8131517154400772865057318955745092033018530484711381831540732405331903846208403642176370391155063978
9000742853672196280903477974533320468368795868580237952218629120080742819551317948157624448298518461
5097048880272747215746881315947504097321150804981904558034168269497871413160632106863915116817743047
92596709376
( execution time : 0.218 s )
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
24.10.2009, 22:08 #6
интересно, с какой целью бывает нужно вычислить 2 в 10 000 степени я думаю обычному земному программисту это ни к чему, а обычной студентке так тем более
1
MotherBoard
Путешественница
1250 / 478 / 11
Регистрация: 22.02.2009
Сообщений: 2,843
24.10.2009, 22:14 #7
Цитата Сообщение от selevit Посмотреть сообщение
представь себе 2 в 10000 степени - такого числа даже long double не знает)
Ну да! Вот только тип Дабл - 8 метров памяти,тип Лонг - 4 метра памяти.... А Лонг Дабл?? сколько занимает памяти и какие хранит значения??? Что-то не найду....
1
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
24.10.2009, 22:18 #8
Ошибаешься Обычному "земному программисту" операции с такими сумасшедшими числами все же бывают иногда нужны - это обыкновенная прикладная криптография; например, криптоключ длиной в 4096 бит - это, грубо говоря, 2 в степени 4096....

Добавлено через 2 минуты
MotherBoard, про long double - например, http://en.wikipedia.org/wiki/Long_double
2
MotherBoard
Путешественница
1250 / 478 / 11
Регистрация: 22.02.2009
Сообщений: 2,843
24.10.2009, 22:24 #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
MotherBoard, про long double - например, http://en.wikipedia.org/wiki/Long_double
Было бы оно на русском языке! Я с инглишем хромаю....

Добавлено через 1 минуту
Цитата Сообщение от CheshireCat Посмотреть сообщение
Ошибаешься Обычному "земному программисту" операции с такими сумасшедшими числами все же бывают иногда нужны - это обыкновенная прикладная криптография; например, криптоключ длиной в 4096 бит - это, грубо говоря, 2 в степени 4096....
Для таких крупных данных,где не требуется отрицательных чисел,можно пользоваться беззнаковым типом данных с удвоенной границей диапазона......
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
24.10.2009, 22:27 #10
Цитата Сообщение от CheshireCat Посмотреть сообщение
Ошибаешься Обычному "земному программисту" операции с такими сумасшедшими числами все же бывают иногда нужны - это обыкновенная прикладная криптография; например, криптоключ длиной в 4096 бит - это, грубо говоря, 2 в степени 4096....
не спорю, что нужны, но зачем они нужны студентке 1го курса?
1
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
24.10.2009, 22:58 #11
зачем они нужны студентке 1го курса?
Ей знакомый парень-программист сказал что если она вычислит число 2^10000, то он будет с ней дружить
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
24.10.2009, 23:25 #12
Цитата Сообщение от odip Посмотреть сообщение
Ей знакомый парень-программист сказал что если она вычислит число 2^10000, то он будет с ней дружить
жжошь
1
MotherBoard
Путешественница
1250 / 478 / 11
Регистрация: 22.02.2009
Сообщений: 2,843
24.10.2009, 23:37 #13
Цитата Сообщение от selevit Посмотреть сообщение
жжошь
Зачем да почему? Оффтоп пошёл.....)))
1
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.10.2009, 01:06 #14
Вычисления подобных значений, а также 100000! и подобных длинных целых необходимо для общего развития студентов. Закрыли обсуждения данного вопроса
1
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
25.10.2009, 09:28 #15
Gae4ka_1, классы знаешь? про обсуждение - типичная олимпиадная задачка

Добавлено через 20 минут
вот так выглядит сравнения двух до неприличия больших чисел [100 000].[100 000] если постаратся немножко, по этому примеру можно написать и возведение в степень
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <fstream>
#include <iostream>
using namespace std;
class fmilion
{
private:
char *strc,*strd;
int lenc,lend;
public:
    fmilion(char *c)
    {
        int i=0;lenc=0;lend=0;int k=0;
        for(;c[i]=='0';i++);
        for(;c[i]!='.'&&c[i]!=0;i++)
                    lenc++;
        if(lenc)
        {
            strc=new char[lenc+1];
            for(int j=i-lenc;j<i;j++)
                {strc[k]=c[j];k++;}
            strc[k]=0;
            k=0;
        }
        if(c[i]==0){strd=NULL;lend=0;return;}
        i++;
        for(;c[i]!=0;i++)
        lend++;
        strd=new char[lend+1];
        for(int j=i-lend;j<i;j++)
        {strd[k]=c[j];k++;}
        strd[k]=0;
    }
~fmilion()
{
delete strc;
delete strd;
}
 
int fmilioncmp(fmilion &a)
{
    if(lenc!=a.lenc){if (lenc>a.lenc)return 1 ;else return -1;}
        
    int i=0;
    while(i<lenc)
    {
        if(strc[i]!=a.strc[i]){if(strc[i]>a.strc[i])return 1;else return -1;}
    i++;
    }
    if(lend!=0||a.lend!=0){
    int j,k;
    if (lend>a.lend){j=a.lend;k=lend;
        for(int e=0;e<i;e++)
        if(strd[e]!=a.strd[e]){if(strd[e]>a.strd[e])return 1;else return -1;}
    for(;k>i;k--)
        if(strd[k]!='0')return 1;}
    else{j=lend,k=a.lend;
        for(int e=0;e<j;e++)
        if(strd[e]!=a.strd[e]){if(strd[e]>a.strd[e])return 1;else return -1;}
    for(;k>j;k--)
        if(strd[k]!='0')return -1;}}
    return 0;
}
};
void main()
{
//time_t z=time(NULL);
char a[200001],b[200001];
ifstream fin("input.txt",ios::in);
fin>>a>>b;
fmilion e(a);
fmilion f(b);
int c=e.fmilioncmp(f);
ofstream fout("output.txt",ios::out);
fout<<c;
fin.close();
fout.close();
//cout<<c<<endl;
//time_t x=time(NULL);
//cout<<x-z<< "sec";
//cin>>c;
return;
}
1
25.10.2009, 09:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2009, 09:28
Привет! Вот еще темы с ответами:

Создание массива из 10000 не повторяющихся строк - C++
Всем добрый вечер. Мне необходимо сделать проверку на повторяющиеся слова в массиве и, если таковые есть, заменить их. Слова и кол-во букв...

Решение системы уравнений с N>=10000 переменными - C++
Здравствуйте есть такая проблема: необходимо решить систему линейных алгеброических уравнений, проблема состоит в том что число уравнений...

Найти дружественные числа, принадлежащие отрезку [1; 10000] - C++
Помогите, сегодня сдавать надо. Дружественными числами являются два натуральных числа, таких, что каждое из них равно сумме всех...

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


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

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

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