Другие языки программирования и технологии
Найти первое пятнадцатизначное число. С++
Даны числа фибоначи 1 1 2 3 5 8 13 21 ...Найти первое число Фибоначчи, которое содержит 15 цифр? Никак не можем решить уже. помогите плз. Вот формула фибоначи fib = fib[i-1]+fib[i-2];
Ну считаете по формуле числа. Как дойдете - будет вам ответ.
А так как числа большие, я бы разбивал их на меньшие - по несколько разрядов.
А так как числа большие, я бы разбивал их на меньшие - по несколько разрядов.
#include <stdio.h>
int main(){double a,b; for(a=b=1;a<=1e14;a=(b+=a)-a); printf("% 20.0lf",b); return 0;}
Если захочешь, чтобы программа печатала не только это число, но и все до него, убери ; перед printf.
int main(){double a,b; for(a=b=1;a<=1e14;a=(b+=a)-a); printf("% 20.0lf",b); return 0;}
Если захочешь, чтобы программа печатала не только это число, но и все до него, убери ; перед printf.
#include <iostream>
int main() {
long long a = 0, b = 1;
while (a < 100000000000000LL) { // пока меньше, чем минимальное с 15 цифрами
// вычисляется следующее число Фибоначчи
b += a;
a = b - a;
}
std::cout << a << std::endl;
}
> Redis
> writeln('1304969544928660');
Ну-ну. Содержит 16 цифр и такого числа Фибоначчи не существует.
> Krab Bark
> #include <stdio.h>
> int main(){double a,b; for(a=b=1;a<=1e14;a=(b+=a)-a); printf("% 20.0lf",b); return 0;}
Не смотря на оформление исходного кода, безусловно лучший ответ!
int main() {
long long a = 0, b = 1;
while (a < 100000000000000LL) { // пока меньше, чем минимальное с 15 цифрами
// вычисляется следующее число Фибоначчи
b += a;
a = b - a;
}
std::cout << a << std::endl;
}
> Redis
> writeln('1304969544928660');
Ну-ну. Содержит 16 цифр и такого числа Фибоначчи не существует.
> Krab Bark
> #include <stdio.h>
> int main(){double a,b; for(a=b=1;a<=1e14;a=(b+=a)-a); printf("% 20.0lf",b); return 0;}
Не смотря на оформление исходного кода, безусловно лучший ответ!
Формула конечно хороша, но не проще ли написать, что следующее число равно сумме дувух передыдущих. Так что возьмите 16-ти разрядный калькулятор и складывайте 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 26657, 46358, 73025....поверьте много времени это не займёт. Как вы видите числа увеличивается на порядок (разряд) в единицах 6 раз, в десятках 6 раз в сотнях 5 раз, в тысячах уже 4 разаВ десетках тыясч это 5 раз.. . т. е. на разрад примерно 5 вычислений.. . 14*5= 120 раз, из них 26 уже готовы. Понравилось? Нет. Тогда в Паскале.
с массивомКод Pascal
1
2
3
4
5
6
7
8
9
10
11var
a: array[1..10] of integer;
i: integer;
begin
a[1]:=0;
a[2]:=1;
for i:=3 to 10 do
a:=a[i-1]+a[i-2];
writeln('a(10) = ',a[10]);
readln;
end.
или без массива
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14var
i,c,a,b: integer;
begin
a:=0;
b:=1;
for i:=3 to 10 do
begin
c:=a+b;
a:=b;
b:=c;
end;
writeln('10-е число Фибоначчи = ',c);
readln;
end.
Я вам дал как найти 10-е число, а вы ищите примерно 120-е и рядом. Удачи.
Блин. Номера и действия съехали.. . а жаль.
с массивомКод Pascal
1
2
3
4
5
6
7
8
9
10
11var
a: array[1..10] of integer;
i: integer;
begin
a[1]:=0;
a[2]:=1;
for i:=3 to 10 do
a:=a[i-1]+a[i-2];
writeln('a(10) = ',a[10]);
readln;
end.
или без массива
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14var
i,c,a,b: integer;
begin
a:=0;
b:=1;
for i:=3 to 10 do
begin
c:=a+b;
a:=b;
b:=c;
end;
writeln('10-е число Фибоначчи = ',c);
readln;
end.
Я вам дал как найти 10-е число, а вы ищите примерно 120-е и рядом. Удачи.
Блин. Номера и действия съехали.. . а жаль.
А нафига массив?
достаточно двух -и одно из них подменять новым сдвигая старое во второе через времянку.
15 значное -число знаков определяется по десятичному логарифму.
fibprev -одно, предидущее.
fib - текущее.
while(log(fib)+1<15){tmp=fib; fib+=fibprev;fibprev=tmp;}
примерно так
(не помню точно log() или ln() в стандартной библиотеке math.h - ну да по хелпам всегда можно глянуть и в случае чего домножить на переходный коэффициент)
-------
У Krab Bark ответ самый точный.
я протормозил и сходу не сообразил. что можно сравнивать не число цифр записи а просто со степенью десятки и не мучать комп логарифмами
достаточно двух -и одно из них подменять новым сдвигая старое во второе через времянку.
15 значное -число знаков определяется по десятичному логарифму.
fibprev -одно, предидущее.
fib - текущее.
while(log(fib)+1<15){tmp=fib; fib+=fibprev;fibprev=tmp;}
примерно так
(не помню точно log() или ln() в стандартной библиотеке math.h - ну да по хелпам всегда можно глянуть и в случае чего домножить на переходный коэффициент)
-------
У Krab Bark ответ самый точный.
я протормозил и сходу не сообразил. что можно сравнивать не число цифр записи а просто со степенью десятки и не мучать комп логарифмами
program p;
begin
writeln('1304969544928660');
end.
begin
writeln('1304969544928660');
end.
int number=0;
while (number!=15)
{
fib=fib[i-1]+fib[i-2]; // тут вычисляешь следующее число
int len=Convert.ToString(fib); // конвертируешь в строку число фиб.
length=len.Length; // длина строки len
}
MessageBox.Show(number); // Это и будет первое 15 значное число.
while (number!=15)
{
fib=fib[i-1]+fib[i-2]; // тут вычисляешь следующее число
int len=Convert.ToString(fib); // конвертируешь в строку число фиб.
length=len.Length; // длина строки len
}
MessageBox.Show(number); // Это и будет первое 15 значное число.
Похожие вопросы
- Используя функцию find_if найти первое простое число
- Найдите наибольшее четырехзначное число, которое при делении на любое однозначное число, кроме 1,2и3, дает в остатке 3
- Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа (VB) прошу помощи
- Как в Pascal найти суму числел числа!?
- Помогите решить на ПАСКАЛЕ!Увеличить четные числа массива размера N,на исходное значение первого четного числа.
- Объясните, что значит "найти цифры трехзначного числа" - язык Паскаль. Не врубаюсь совсем...
- Найти все натуральные числа, не превосходящие заданного числа n, которые делятся на каждую из своих цифр. Паскаль.
- Найти самое большое число с++
- Требуется найти минимальное натуральное число с суммой цифр 123, которое делится на 1237 кто знаетпомогите алгоритмом!
- Задача по информатике: Найти все простые числа в промежутке от 20 до 70 ? Не могу решить