-
مدیر بازنشسته
فیبوناچی اعداد بزرگ در c
با سلام خدمت همه
سئوالی داشتم با این عنوان که چطوری میشه فیبوناچی اعداد بزرگ رو بدست آورد و در خروجی نمایش داد البته به صورت نماد علمی نباشه.
قبلا برنامه ای مشابه همین با عنوان فاکتوریل عدد n دیده بودم حالا می خوام بدونم چطوری می تونم برنامه سری فیبوناچی عددn رو بنویسم.
و سئوال دیگه اینکه با چه تابعی میشه مدت زمان اجرای برنامه رو محاسبه کرد به این شکل که پس از دریافت یک مقدار تایمر شروع به کار کرده و پس از اتمام برنامه مدت زمان لازم برای اجرا را نمایش دهد.
اگه نمونه کدی در زمینه دوسئوال فوق ارائه بدین ممنون میشم.
-
-
مدیر بازنشسته
برای فیبوناچی این ببین
کد:
#include<iostream.h>
#include<iomanip.h>
#include<time.h>
double fibo(int);
void main()
{
int n;
cin>>n;
cout<<setiosflags(ios::fixed)<<setprecision(0)<<fi bo(n)<<endl;
}
double fibo(int n)
{
double a=0,b=1;
double fib;
if(n==0 || n==1)
fib=n;
else
{
for(int i=1;i<n;i++)
{
fib=a+b;
a=b;
b=fib;
}
}
return fib;
}
این برنامه نسبت به تابع بازگشتی فیبوناچی اعداد بیشتری رو محاسبه میکنه. برای نشون دادن بدون نماد علمی هم از setiosflags استفاده کردم که این هم وقتی طول رشته اعداد از یه حدی بالاتر بره دیگه چاپ نمیکنه. و از یه حدی بالاتر باید این دستور رو حذف کنی و به صورت نماد علمی جواب بگیری. در کل اگه بخوای اعداد خیلی بزرگتر رو محاسبه کنی که تو double نمیگنجه باید از آرایه ها استفاده کنی.
برای مدت زمان اجرا هم اینجا رو ببین:
زمان اجرای برنامه - جامعه برنامه نویس
-
-
مدیر بازنشسته
یکی دیگه از راه های حساب عدد فیبوناچی استفاده از عدد طلایی هست که میشه از فرمول زیر عدد فیبوناچی رو بدست آورد:
کد:
fn = Phi n / 5½
اطلاعات بیشتر رو میتونید از لینک زیر بدست بیارید:
Mathematics __________________
-
-
مدیر بازنشسته
-
-
مدیر بازنشسته
احتمالا با این مسایل که به bignum معروفند آشنایی دارید. باید با آرایه کار کنید دیگه. عدد رو رقم به رقم داشته باشید. فقط کافیه جمع رو پیاده سازی کنید.
در مورد سوال دوم هم: اگه فقط می خواید خودتون بدونید که برنامه چقدر طول کشیده و اگه برنامه رو در لینوکس کامپایل و اجرا می کنبد می تونید از خود دستور time در ترمینال استفاده کنید:
کد:
g++ -o sample samlple.cpp && time ./sample
که مورد user به درد شما می خوره.
اما اگه با C++ بخواید کار کنید می تونید از clock() استفاده کنید. مثلا این طوری:
کد:
double t0=clock();
.....
cout<<(clock()-t0)/CLOCKS_PER_SEC
;
البته دقیق یادم نیست باید چه لایبرری رو اینکلود کنید ولی فکر کنم این بود:
کد:
#include<iomanip>
-
کلمات کلیدی این موضوع
مجوز های ارسال و ویرایش
- شما نمیتوانید موضوع جدیدی ارسال کنید
- شما امکان ارسال پاسخ را ندارید
- شما نمیتوانید فایل پیوست کنید.
- شما نمیتوانید پست های خود را ویرایش کنید
-
مشاهده قوانین
انجمن