PDA

View Full Version : سوال: فاکتوريل عدد 170



goleleila
یک شنبه 22 دی 1387, 16:47 عصر
سلام دوستان
فاکتوريل عدد 170 رو با زبان C++ چه طوري بايد بنويسم؟

yesno22
یک شنبه 22 دی 1387, 17:23 عصر
<include <iostream.h#
<include <conio.h#
()void main
}
;int number,result=1
;cin >> number
(++for(int i=1; i<=number; i
}
;result *= i
{
;cout << result
;()getch
{

smile17
یک شنبه 22 دی 1387, 17:34 عصر
int فقط تا سی و دو هزار و خورده ای رو در خود نگه می دارد و برای فاکتوریل اعداد بزرگ به کار نمی آید در این مورد ++C دارای تابعی می باشد که نتیجه را به کمک نماد علمی نشان می دهد البته این تابه هم دارای محدودیت هایی است و کوزه شکسته ای هست که میشه بعضی وقتا ازش آب خورد.بهترین راه برای این ک.نه موارد نوشتن یه برنامه هست که با وکتورها کار کنه و این جور نتایج خیلی بزرگ رو به کمک وکتور حساب و نشان دهد یا این که از آرایه ای از بایت ها استفاده کند و عدد را در آرایه ای از بایت ها قرار دهد و محاسبه نماید و نشان دهد

yesno22
دوشنبه 23 دی 1387, 17:40 عصر
سلام
من اين تكه برنامه رو به طور كلي نوشتم و هدفم اشنايي با فاكتوريل اعداد از نوع int بود.

saied_genius
دوشنبه 23 دی 1387, 17:46 عصر
::نكته::

بهترين راه براي نوشتن برنامه فاكتوريل (در هر زباني) استفاده از يك تابع برگشتي است.

(از داخل خود تابع ، خود تابع را صدا كند)

موفق باشيد.

Mehdi Asgari
دوشنبه 23 دی 1387, 20:08 عصر
از GMP (http://prokutfaq.byethost15.com/BigNumFactorial)یا BigInt (http://sourceforge.net/projects/cpp-bigint/)استفاده کن

مسعود اقدسی فام
دوشنبه 23 دی 1387, 23:45 عصر
سلام
اگر فاکتوریل این عدد رو به صورت دقیق می خواید که باید از اعداد صحیح بسیار بزرگ استفاده کنید. هیچ متغیری در سی استاندارد یا سی پلاس پلاس چنین اعداد بزرگی رو پشتیبانی نمی کنن. برای چنین کاری باید از کلاسهای ویژه طراحی شده برای کار با اعداد بزرگ استفاده کنید.
اما اگر هدف شما تخمین مقدار فاکتوریل باشه، روابط ریاضی ساده ای برای اینکار وجود داره.

hasanaminabade4817
سه شنبه 24 دی 1387, 23:40 عصر
سلام
برنامهاي كه عددnرابگيردوفاكتوريل حساب كند؟

goleleila
چهارشنبه 25 دی 1387, 14:49 عصر
مشکل دقيقاً بر سر محدوديت در متغيرهاست
چون هيچ متغيري نمي تونه اين جوابهاي n رقمي رو ذخيره کنه.راهکارش استفاده از آرايه ها بود که خودم تو اينترنت پيدا کردم.
با borland هم تستش کردم کاملاً درسته.
اگه خوشتون اومد تشکر فراموش نشه!!!

اين هم سورس برنامه :


#include<iostream.h>
#include<conio.h>
int main()
{
clrscr();
int a[1500];
int i,f,c=0;
long int n;
cout<<"enter the number"<<"\n";
cin>>n;
a[0]=0;
for (i = 2; i < 1500; i++)
a[i] = 0;
a[1] = 1;
for (f = 1; f <= n; f++)
{
for (i = 1; i <1500; i++)
a[i] = f * a[i];
for (i = 1; i <1500; i++)
{
if (a[i] > 9)
{
a[i + 1] = a[i + 1] + a[i] / 10;
a[i] = a[i] % 10;
}
}
}
for (i =1499 ; i >= 1; i--)
{
if(a[i]!=0)
{
c=i;
break;
}
}
cout<<"the fact of this number is:";
for(i=c;i>=1;i--)
cout<<a[i];
getch();
return 0;
}

smile17
چهارشنبه 25 دی 1387, 16:12 عصر
مشکل دقيقاً بر سر محدوديت در متغيرهاست
چون هيچ متغيري نمي تونه اين جوابهاي n رقمي رو ذخيره کنه.راهکارش استفاده از آرايه ها بود که خودم تو اينترنت پيدا کردم.
با borland هم تستش کردم کاملاً درسته.
با vector هم میشه

funfullson
پنج شنبه 26 دی 1387, 09:23 صبح
[quote=hasanaminabade4817;664310]سلام


برنامهاي كه عددnرابگيردوفاكتوريل حساب كند؟[/quote

Fact(int Num)
{
static int Answer = 0;
Fact(0) = 1;
Fact(1) = 1;
Answer =Answer * Fact(Num - 1);
}

main()
{
int Num;
cin>>Num;
Fact(Num);
}


البته این روش حافظه ی زیادی مصرف می کنه.

smile17
پنج شنبه 26 دی 1387, 09:31 صبح
چون شما از int برای ذخیره ی حاصل استفاده می کنید برای فاکتوریل اعداد بزرگ جواب نمی دهد