Программа проходит не все тесты

261
01 апреля 2018, 17:15

Есть программа, которая, используя метод Console.ReadLine(), вводит строку, содержащую три числа через пробел — сумму, процентную ставку (в процентах) и срок вклада, а потом на основе этих значений вычисляет накопившуюся сумму на момент окончания вклада. Результат выводится на консоль.

Детали:

  1. В конце каждого месяца происходит капитализация — к сумме прибавляется накопившийся за месяц процент. Далее процент вычисляется от этой увеличенной суммы.
  2. Процентная ставка — годовая (то есть в конце месяца сумма на счете увеличивается на одну двенадцатую ставки)
  3. Вклад открыт в первый день месяца, а срок вклада — это целое количество месяцев.
  4. Код, решающий основную задачу представлен в виде метода Calculate. В этой задаче гарантируется, что ввод корректный.
  5. Формула сложного процента (расчет в месяцах) - S = P * (1 + (I / 100 * 12))^n, где P - сумма вклада, I - процентная ставка, n - срок вклада и S - сумма на момент окончания вклада

Код:

    static double[] GetNumbersFromConsole(string data)
    {
        double[] Tokens = data.Split().Select(x => double.Parse(x)).ToArray();
        return Tokens;
    }
    static double Calculate(string userInput)
    {
        double[] Tokens = GetNumbersFromConsole(userInput);
        double temp = Tokens[0] * (1 + (Tokens[1] / (100 * 12)));
        double sumAtTheEnd = Math.Pow(temp, Tokens[2]);
        return sumAtTheEnd;
    }
    static void Main(string[] args)
    {
        string userInput = Console.ReadLine();
        Console.WriteLine(Calculate(userInput));
    }

Проблема:

При вводе строки [10 12 1] результат корректный, т.е. равен 10.1. Однако следующий тест программа не проходит, и это мне не понятно. Введя строку [100 12 2] ожидается вывод 102.01, а результат программы - 10201. В чем проблема и как ее решить?

Answer 1

Все, разобрался сам. Дело было в том, что я возводил в степень не ту часть уравнения. S = P * (1 + (I / 100 * 12))^n - как можно заметить, в степень возводится (1 + (I / 100 * 12)), а я по ошибке возводил целиком все уравнение:

double temp = Tokens[0] * (1 + (Tokens[1] / (100 * 12)));
double sumAtTheEnd = Math.Pow(temp, Tokens[2]);
READ ALSO
unity общение сервер-клиент

unity общение сервер-клиент

Необходимо чтобы Клиент передавал данные(переменные) Серверу, а Сервер отвечал на запрос

281
Сложное приложение на одной windows form

Сложное приложение на одной windows form

Подскажите пожалуйста, как создать сложное приложение windows form с использованием только одной формы что бы наполнение формы нужными элементами...

228
Один dataGridView на две datetimePicker C# winforms

Один dataGridView на две datetimePicker C# winforms

Добрый день всемЕсть данные в dataGridView и еще есть две datetimePicker

222
Странность округления double (c#, .net-core)

Странность округления double (c#, .net-core)

Вот тест (xUnit), который у меня выполняется успешно, и это плохо для меня:

198