Loops: Problem5 - Calculate
- 
	Всичко работи добре на пръв поглед, но ми дава грешни резултати... 
- 
	
- 
	static void Main(string[] args) 
- 
	{ 
- 
	int x, n; 
- 
	int result = 1; 
- 
	n = int.Parse(Console.ReadLine()); 
- 
	x = int.Parse(Console.ReadLine()); 
- 
	double s=1; 
- 
	int[] factorials = new int[15]; // съхранявам факториелите на числата от 1 до 16 
- 
	for (int i = 0; i < n; i++) 
- 
	{ 
- 
	for (int j = 1; j < i; j++) // с върешния цикъл откривам факториелите 
- 
	{ 
- 
	result = result * j; 
- 
	} 
- 
	factorials[i] = result; // с външния ги запазвам в масива 
- 
	} 
- 
	for (int m = 0; m <= n; m++) // в този цикъл извършвам изчисленията 
- 
	{ 
- 
	s = s + (factorials[m] / Math.Pow(x, m)); 
- 
	} 
- 
	string sum = s.ToString(); 
- 
	String.Format("{0:0.00000}", sum); //форматирам сумата да се извежда до 5 знака след запетаята 
- 
	Console.WriteLine(sum); 
- 
	} 
Благодаря!
P.S.: Коментарите ги добавях при качването тук, във форума.
Пробвай да пазиш факториелите в масив от decimal и направи принтирането направо в Console.WriteLine(). Ако сметките са верни би трябвало да изкара резултатите, които се очакват.
Добре, обаче ми даде гршка с кастването при Math.Pow(x,m);
Math.Pow връща double. Най-лесното е просто да кастнеш към decimal. Друг вариант, който е по-ефикасен, е да си напишеш метод, който да ти сметне степента; то е обикновен цикъл с умножение на всяка итерация. Методът може да връща int/long и там няма да имаш проблем с decimal при делението.
Друго, което сега забелязвам, е че правиш доста излишни калкулации. По принцип идеята да се пазят стойностите в масив е за да не се повтарят изчисления. Махни вътрешни цикъл, просто във външния умножавай по следващото число и запазвай резултата в масива. На 1 слагаш 1, на следващата итерация умножаваш по 2, получаваш 2, слагаш в масива; на следващата умножаваш по 3, получаваш 6, слагаш в масива. И т.н. В момента за всеки елемент започваш калкулацията отначало (а както посочи колегата по-долу, не връщаш резултата на 1 и затова няма да получиш правилните отговори).