كي بلده با c فاكتوريل 1000 را بنويسد.
Printable View
كي بلده با c فاكتوريل 1000 را بنويسد.
ba in systemhaye mojood anjame chenin kari amali nist(shayadam bashe! amma man ke nadaram ) va padideye Overflow rokh mide.
albate mitunid dadeye khodetoon ro besoorate unsigned long double tarif konid ta betunin factoriel bozorgtarin adade momken ro andazegiri konin amma na adade 1000! ro
روح الله بيا اينجا:
[cod]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[cod/]
اینم سورس برنامه به زبان c++ البته 1000 فاکتوریل به دلیل اینکه خیلی بزرگه بصورت نماد علمی نوشته میشه:
:8::5::31:کد:#include <iostream.h>
void main(){
long double fact2=2,fact;
int i;
for(i=3;i<=1000;i++){
fact=i*fact2;
fact2=fact;
}
cout<<fact<<endl;
}
بفرمایید اینم کد 1000!
با یک کم تغییر میشه بیشتر هم کردش
}کد:#include<stdio.h>
int main()
{
static int orz[1001][3000]={0};
int i,j,input,flag;
orz[0][0]=1;
for(i=1;i<=1000;i++)
{
for(j=0;j<=2999;j++)
{
orz[i][j]=orz[i-1][j]*i;
}
for(j=0;j<=2998;j++)
{
orz[i][j+1]+=(orz[i][j]/10);
orz[i][j]%=10;
}
}
while(scanf("%d",&input)!=EOF)
{
printf("%d!\n",input);
flag=0;
for(j=2999;j>=0;j--)
{
if(orz[input][j]!=0)flag=1;
if(flag==1)printf("%d",orz[input][j]);
}
printf("\n");
}
return 0;
اینم مال من با حلقه while
کد:#include<iostream>;
using namespace std;
int main()
{
double j=1;
int i=1000;
while (i>0)
j*=i--;
cout<<j<<endl;
return 0;
}
برنامه ي قبلي که نميتوه 1000! را حساب کنه چون از تايپ متغير ميزنه بيرون بقيه اش را هم بايد امتحان کرد..
دو تا برنامه قبل هم من کامپايل کردم ولي fatal error داره يعني باز از ميزان تايپ ها خارج ميشه
به نظر برنامه آقاي ولي زاده درست ه ولي نياز به تغيير داره
اگه برنامه جناب hadi_joulaee درست باشه برنامه من هم با گذاشتن j=1 در اول برنامه درست می شه(یه اشتباه کوچیک رخ داد)نقل قول:
در ضمن شما می تونید برنامه hamed valizadeh رو هم با اضافه کردن { بعد از return کامپایل کنید من این برنامه رو کامپایل و اجرا کردم و جواب درست رو داد اینم عکسش
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
واقعا باید بهشون افرین گفت من رفتم برنامش و چک کنم بای
سلام
من تست نکردم ولی کد دوستانی که از یک تک حلقه while یا for استفاده میکنند و جواب را در یک متغییر میریزند امکان ندارد جواب دهد!
عدد 79 فاکتوریل در مرز 100 رقم قرار میگیرد و عدد 179 فاکتوریل در مرز پر شدن double ، پس امکان ندارد متغییری عادی بتواند 1000 را در خود جای دهد، در اصل این تمرین های نیمچه مزخرف را در دانشگاه ها فقط میدهند و راه حلش آن است که یک ضرب کننده دستی ساخته شود که عین انسان که دو عدد را روی کاغذ ضرب میکند برنامه فوق هم دو عدد موجود در آرایه را در هم ضرب کند و جواب را به صورت آرایه باز پس دهد. (البته طبیعی است که الگوریتم فوق را به شیوه های مختلف میتوان پی ریزی کرد.)
استاد _H2_ عزیز این برنامه برام خیلی جالبه ولی از برنامه اون دوستمون چیزی سردرنیاوردم راستش و بخوای روی همون #include<stdio.h> موندم [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می شه حودت در مورد راه حلی که گفتی بیشتر توضیح بدی اگه یه مثال ساده هم بیاری عالی می شه
ممنون