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 и затова няма да получиш правилните отговори).