تابع Fact که توضیح لازم نداره فقط لیست رو می فرسته واسه ضرب
اما تابع MultiplyListAndInt :
ببینید من یک لیست دارم که حاوی جواب خواهد بود
ولی نه به صورت عدی در واقع اگر هر index لیست رو به صورت یک خانه در نظر بگیریم هر خانه نگه دارنده یک عدد از جواب(0 تا 9) خواهد بود
اگه ما فرض کنیم که جواب نهایی 120 باشه لیست در آخر عملیات باید داری سه خانه که به ترتیب 1 و 2 و 0 هستند اگه اینا رو از ایندکس صفر پشت سر هم قرار بدیم می شه 120 یعنی جواب!
به این تصویر دقت کنید:
مثال رو با 5 فاکتوریل توضیح می دم
می دونید که !5 بربر است با 2*3*4*5 البته چون یک بی تاثیره ننوشتم
خوب در ابتدای کار لیست من دارای یک خانه با مقدار 1 است که می تونید اونو جهت راحتی 2 هم بگیرید
حالا من می یام تو مرحله بعدی 2 رو در 3 ضرب می کنم
جواب می شه 6 من این 6 رو با 2 موجود در لیست جایگزین می کنم(همچنان جواب داخل لیست درسته)
نوبت میرسه به 4:
وقتی من لیست رو در 4 ضرب کنم جواب می شه
24 ولی لیست من یک خونه داره
همون طور که می دونید در عمل ضرب اگه عدد بزرگتر از 10 شد رقم یکان در محل خود باقی و بقیه به سمت چپ اضافه می شه و چون سمت چپ عدد از نظر ارزشی 10 برابر سمت راسته پس باید اول تقسیم بر 10 بشه بعد بره
با این توضیحات 4 با 6 جایگزین و 2 (20 تقسیم بر 10) رو در دست داریم
حالا این 2 رو باید چی کار کنیم؟
وقتی از حلقه خارج شدیم چک می کنیم ببینیم چیزی در دستمون مونده یا نه اگه مونده باشه یک خانه(والبته در حالت کلی به تعداد ارقام عدد) به لیست اضافه و عدد رو انتقال می دیم
پس الان لیست ما دو خانه داره با 2و4 که میشه 24
اگه ما دو باره این لیست رو با روش بالا ضرب کنیم لیستمون میشه 1و2و0 یا همون جواب نهایی 120
فقط باید توجه داشته باشد که اگه عدد انتقالی بیش از یک رقم شد باید به تعداد ارقام اون خانه اضافه بشه
یعنی اگه لیست عدد 456789 رو نشون می ده و عدد انتقالی 123 است(بعد از تقسیم بر 10) باید بعد از جا گذاری به این شکل دربیاد
123456789
تا ازش های مکانی هم رعایت بشه
بازم در خدمتم