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

Разработать класс large - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Синтаксис математического выражения С++ http://www.cyberforum.ru/cpp-beginners/thread1041138.html
Задание звучит так : "Создать программу, анализирующую правильность записи арифметического выражения с точки зрения синтаксиса С++. Арифметическое выражение задается строковой переменной и вводится...
C++ Ввод данных Во время работы программы она не видит строку(как я думаю) cout<<"m="<<m<<"";(эта строка находится в функции decrypt) как это исправить? Программа работает #include <iostream> #include... http://www.cyberforum.ru/cpp-beginners/thread1041116.html
Сортировка C++
Нужно создать программу для сортировки массива из 10 элементов типа unsigned int поразрядной сортировкой и сортировкой выбором . заполнение массива случайно или как константа. вот код паскаль:uses...
C++ Разделить цифры, стоящие на нечётных местах на 3
Дано число. Разделить цифры, стоящие на нечётных местах на 3. Если не делятся без остатка, то оставить без изменения. помогите пожалуйста составить программу с++ пожалуйста
C++ Будильник Bada http://www.cyberforum.ru/cpp-beginners/thread1041093.html
Так как среда разработки называется bada C++ имею полное право сюда писать. Вообще те у кого смарты на баде вообщем стандартном будильнике не воспроизводится звуки при сигнале будильника на наушники...
C++ Определить, кратны ли числа последовательности своему порядковому номеру Дана последовательность целых чисел, конец которой обозначен нулем. Определить, кратны ли числа последовательности своему порядковому номеру. помогите пожалуйста составить ... подробнее

Показать сообщение отдельно
trezz
0 / 0 / 1
Регистрация: 21.01.2013
Сообщений: 107

Разработать класс large - C++

14.12.2013, 17:16. Просмотров 234. Ответов 0
Метки (Все метки)

Помогите, решить задачу. Длинную арифметику перечитал уже несколько десятков раз, но все равно не понял. Небольшой исходник по первой части я уже сделал..., а дальше тупик.. В с++ почти ноль.
Разработать класс large – длинное целое. Для хранения одной десятичной цифры использовать одно число типа char. Количество десятичных цифр, которые должны размещаться в этом числе, передавать в конструкторе. Реализовать методы присваивания, сложения двух чисел, печати числа на экране.
Переписать программу вычисления числа Фибоначчи для типа large. Вычислить fn=100 (22 десятичных цифры). Заме-чание: если Вы в прошлый раз использовали рекурсивный алгоритм вычисления чисел Фибоначчи, то теперь Вам необходимо разработать нерекурсивный алгоритм, так как рекурсивное вычисление для n=100 займет слишком много времени.

#include <iostream>
#include <stdlib.h>
long fibonacci(long);
using namespace std;

int main()
{
setlocale(LC_ALL,"Rus");
int i,j=0;
const int n=20;
int a[n];

cout <<"Массив Фибоначии \n"<<endl;
for(i=0;i<=n-1;i++)
a[i]=fibonacci(i);
for(i=0;i<=n-1;i++)
{
cout << '[' << i+1 << ']' << '=' << a[i] <<'\n';
}
return 0;
}

// Recursive definition of function fibonacci
long fibonacci(long n)
{
if (n==0 || n==1) // base case
return n;
else // recursive case
return fibonacci(n-1)+fibonacci(n-2);
}

Добавлено через 1 час 13 минут
Нашел довольно полезный сайт и сделал сам)
Вот может кому понадобится
#include <iostream>
using namespace std;
unsigned fibonacci(long n)
{
if (n < 2)
return n;
unsigned z= 1, m = n;
while (m > 1) {
m >>= 1;
z <<= 1; }
unsigned fn = 1, fn1 = 1, gn, gn1;
while (z > 1) {
z >>= 1;
gn = fn;
gn1 = fn1;
if (n & z) {
fn = gn1 * gn1 + gn * gn;
fn1 = gn1 * gn1 + 2 * gn * gn1;
} else {
fn = 2 * gn * gn1 - gn * gn;
fn1 = gn1 * gn1 + gn * gn; } }
return fn;
}
int main()
{
setlocale(LC_ALL,"Rus");
cout <<"Массив Фибоначчи \n "<<endl;
for (int i = 0; i < 100; i++)
cout << '[' << i+1<< ']' << '=' << fibonacci(i) <<'\n';
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru