برنامه اي براي يافتن فاكتوريل اعداد با هر سايز

farid-a

Member
سلام.
اولش يكي نوشتم فقط تا !12 جواب داد.
ميشه راهنمائيم بكنيد؟
ممنون.
 

saalek110

Well-Known Member
من زياد برنامه نويسي بلد نيستم. ولي با چه زباني مي خواهي؟
چه جوري ميشه كه تا 12 بشه بقيه اش نشه. شايد نوع متغيرهاتو بد انتخاب كردي.
يك ندا بده.
.
 

***UNIQUE***

Active Member
من نمیدونم شما برا چه زبانی میخواید اما این کد ++c این برنامه است
(این کد تا فاکتوریل عدد 30 رو محاسبه میکنه شما میتونید برای اعداد بیشتر یا برای اینکه از کاربر ورودی بگیره این کد رو تغییر بدید)
موفق باشید
 

پیوست ها

  • CH03.rar
    32.2 کیلوبایت · بازدیدها: 138

saalek110

Well-Known Member

#include <iostream>
#include <conio.h>
#include <iomanip>

unsigned long factorial( unsigned long ); // function prototype

int main()
{
// Loop 10 times. During each iteration, calculate
// factorial( i ) and display result.
for ( int i = 0; i <= 30; i++ )
cout << setw( 2 ) << i << "! = "
<< factorial( i ) << endl;

getch();
return 0; // indicates successful termination

} // end main

// recursive definition of function factorial
unsigned long factorial( unsigned long number )
{
// base case
if ( number <= 1 )
return 1;

// recursive step
else
return number * factorial( number - 1 );

} // end function factorial

من توضيح مي دهم ببينيد درست مي گم. قسمت قرمز ، ميگه كه در برنامه يك تابع تعريف شده. سئوال : ما هر چند تا تابع بسازيم ، بايد بالاي مين(برنامه اصلي) بگيم؟
قسمت آبي هم خود تابع است كه ورودي ميگيره و خروجي اش را با ريترن برميگردونه. ولي من نفهميدم ضربهاي متوالي چه طور انجام ميشه. حالا مهم نيست بعدن سر درميارم. سئوال من اينه كه من ديروز مي خواستم يك تابع مثل تابع شما بسازم بلد نبودم. و امروز اين برنامه به دستم رسيد . آيا در مقالات شما راجع به تابع كامل توضيح داده شده؟ منظورم چگونه تابع ساختنه.
 

***UNIQUE***

Active Member
- شما هر تابعی که مینویسید باید پیش نمونه تابع رو بالا تعریف کنید(مگر اینکه قبل از اولین استفاده تابع خود تابع تعریف شده باشه یعنی مثلا" در اینجا , خود تابع (خطوط آبی رنگ) رو اون بالا بجای پیش نمونه تابع(خط قرمز رنگ) مینوشتم. دراین صورت دیگه احتیاجی به نوشتن پیش نمونه تابع (خط قرمز رنگ در اینجا) نبود.
- این تابع به روش بازگشتی نوشته شده و مقالات من راجع به توابع هنوز تموم نشده (ببخشید که نوشتن مقالات کند پیش میره راستش بیشتر از این فرصت نمیکنم)در این مقاله یا مقاله بعدی حتما" توابع بازگشتی رو بررسی میکنیم
موفق باشید
 

saalek110

Well-Known Member
منظوزتون را فهميدم. منظور تابعي است كه خودش را احضار مي كنه. در ويژوال بيسيك هم داشت.
.
 

GodMaster

Member
اگه ميشه برنامه اصلاح شدش رو كه فاكتوريل 1000 رو چاپ كنه رو بزاريد

خيلي ممنون
 

the_king

مدیرکل انجمن
اگه ميشه برنامه اصلاح شدش رو كه فاكتوريل 1000 رو چاپ كنه رو بزاريد

خيلي ممنون

یک نکته، فاکتوریل عدد 1000 یک عدد 2576 رقمی است با این مقدار (ناچار به شکستن سطر ها شدم تا ارقام جا بشوند) :
کد:
[B]
 402,387,260,077,093,773,543,702,433,923,003,985,719,374,864,
 210,714,632,543,799,910,429,938,512,398,629,020,592,044,208,
 486,969,404,800,479,988,610,197,196,058,631,666,872,994,808,
 558,901,323,829,669,944,590,997,424,504,087,073,759,918,823,
 627,727,188,732,519,779,505,950,995,276,120,874,975,462,497,
 043,601,418,278,094,646,496,291,056,393,887,437,886,487,337,
 119,181,045,825,783,647,849,977,012,476,632,889,835,955,735,
 432,513,185,323,958,463,075,557,409,114,262,417,474,349,347,
 553,428,646,576,611,667,797,396,668,820,291,207,379,143,853,
 719,588,249,808,126,867,838,374,559,731,746,136,085,379,534,
 524,221,586,593,201,928,090,878,297,308,431,392,844,403,281,
 231,558,611,036,976,801,357,304,216,168,747,609,675,871,348,
 312,025,478,589,320,767,169,132,448,426,236,131,412,508,780,
 208,000,261,683,151,027,341,827,977,704,784,635,868,170,164,
 365,024,153,691,398,281,264,810,213,092,761,244,896,359,928,
 705,114,964,975,419,909,342,221,566,832,572,080,821,333,186,
 116,811,553,615,836,546,984,046,708,975,602,900,950,537,616,
 475,847,728,421,889,679,646,244,945,160,765,353,408,198,901,
 385,442,487,984,959,953,319,101,723,355,556,602,139,450,399,
 736,280,750,137,837,615,307,127,761,926,849,034,352,625,200,
 015,888,535,147,331,611,702,103,968,175,921,510,907,788,019,
 393,178,114,194,545,257,223,865,541,461,062,892,187,960,223,
 838,971,476,088,506,276,862,967,146,674,697,562,911,234,082,
 439,208,160,153,780,889,893,964,518,263,243,671,616,762,179,
 168,909,779,911,903,754,031,274,622,289,988,005,195,444,414,
 282,012,187,361,745,992,642,956,581,746,628,302,955,570,299,
 024,324,153,181,617,210,465,832,036,786,906,117,260,158,783,
 520,751,516,284,225,540,265,170,483,304,226,143,974,286,933,
 061,690,897,968,482,590,125,458,327,168,226,458,066,526,769,
 958,652,682,272,807,075,781,391,858,178,889,652,208,164,348,
 344,825,993,266,043,367,660,176,999,612,831,860,788,386,150,
 279,465,955,131,156,552,036,093,988,180,612,138,558,600,301,
 435,694,527,224,206,344,631,797,460,594,682,573,103,790,084,
 024,432,438,465,657,245,014,402,821,885,252,470,935,190,620,
 929,023,136,493,273,497,565,513,958,720,559,654,228,749,774,
 011,413,346,962,715,422,845,862,377,387,538,230,483,865,688,
 976,461,927,383,814,900,140,767,310,446,640,259,899,490,222,
 221,765,904,339,901,886,018,566,526,485,061,799,702,356,193,
 897,017,860,040,811,889,729,918,311,021,171,229,845,901,641,
 921,068,884,387,121,855,646,124,960,798,722,908,519,296,819,
 372,388,642,614,839,657,382,291,123,125,024,186,649,353,143,
 970,137,428,531,926,649,875,337,218,940,694,281,434,118,520,
 158,014,123,344,828,015,051,399,694,290,153,483,077,644,569,
 099,073,152,433,278,288,269,864,602,789,864,321,139,083,506,
 217,095,002,597,389,863,554,277,196,742,822,248,757,586,765,
 752,344,220,207,573,630,569,498,825,087,968,928,162,753,848,
 863,396,909,959,826,280,956,121,450,994,871,701,244,516,461,
 260,379,029,309,120,889,086,942,028,510,640,182,154,399,457,
 156,805,941,872,748,998,094,254,742,173,582,401,063,677,404,
 595,741,785,160,829,230,135,358,081,840,096,996,372,524,230,
 560,855,903,700,624,271,243,416,909,004,153,690,105,933,983,
 835,777,939,410,970,027,753,472,000,000,000,000,000,000,000,
 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000, 000
[/B]

برای نگهداری چنین عددی به متغیر های 8800 بیتی یا به عبارتی 1100 بایتی نیاز دارید، مقایسه کنید با متغیر های 80 بیتی
(10 بایتی) که در کمک پردازنده های ریاضی بکار می روند.
 

saalek110

Well-Known Member
همان طور که استاد عزیز فرمودند متغیری به این بزرگی نداریم. یک راه حل شبیه سازی چنین متغیر بزرگی است. به پستهای زیر توجه کنید به نقل از :
http://www.forum.iranled.com/showthread.php?tid=4878
سلام
من میخوام فاکتوریل را با آرایه ها پیاده سازی کنم که اعداد بزرگ هم حساب کنه(در c++)
با سلام. ببينيد اين طوري ميشه:

يك آرايه از جنس اينتيجر بگيريد. به اندازه كافي بزرگ.
بعد عدد اينپوت را بگيريد و در همه خانه ها ضرب كنيد. اگر دو رقمي شد نتيجه ضرب،، رقم دهگان را با خانه بعدي آرايه جمع بزنيد. با عملگر باقيمانده و تقسيم بر ده ميشه اين كار را كرد.

در كل هر خانه آرايه چون اينتيجر است مي تواند اعداد تا چند هزار را قبول كند ولي شما فرض بگيريد كه فقط اعداد يك رقمي را مي تواند قبول كند. در آخر هم ، همه خانه هاي آرايه را پشت سر هم چاپ كنيد تا عدد نهايي چاپ شود.
من هيچ كدي براي امتحان ننوشتم. ولي ممكنه اين ايده عملي باشه.
 

pa_darya

Member
اين برنامه واسه !N
#include <iostream.h>
int main() {
int i,n,a;
long int p;
cout<<"structur is p=n! . enter n : "<<endl;
cin>>n;
p=1;
i=1;
if(n==0)
cout<<" 0! is 1 ";
else
{
while (i<=n) {
p=p*i;
i++;
}
cout<<n<<"! is "<<p;
}
return 0;
 

جدیدترین ارسال ها

بالا