14. Factorial Trailing Zeroes
Опитах се да реша задачата без стрингове, кода ми минава в дъдж, но това е защото си го нагласих.
https://github.com/PavelPetkov/Methods-Defining-and-Calling-Methods
Ще се радвам да видя и дуги решения
using System;
using System.Numerics;
public class Factorial
{
public static void Main()
{
int num = int.Parse(Console.ReadLine());
BigInteger factorial = FactorialCalculation(num);
Console.WriteLine(CountZeros(factorial));
}
public static BigInteger FactorialCalculation(int num)
{
BigInteger factorial = 1;
for(int i = 0; i<num; i++)
{
factorial *=(num-i);
}
return factorial;
}
public static int CountZeros(BigInteger factorial)
{
int CountZero = 1;
while( factorial % (BigInteger) Math.Pow(10,CountZero) == 0)
{
CountZero++;
}
if(CountZero<20){return CountZero-1;};
return CountZero+1;
}
}
На 28-ми ред трябва да е без "-1", защото сега цикъла ти се завърта веднъж по-малко в някои случаи (предполагам логиката е била, че няма как целия стринг да е от нули, но ти трябва още едно завъртане, за да ти принтира резултата накрая при "x0(0)" случай). Също така в самия цикъл искаме да премахваме само последния символ от стринга всеки път и формулата ти не работи за целта. Ето поправен вариант: https://pastebin.com/vXTdbv5y
Edit: Всъщност формулата в цикъла си работи ако не променяме 28-ми ред, така че по-лесен вариант за оправяне е просто да си направиш в цикъла i <= stringlenght.
Благодрая ти, сега е 100/100.
Нещо тези дължини на стринговете, и от къде до къде да завъртам цикъла са ме прецакали - малко са ми объркващи.
https://pastebin.com/0mHHr6Es А някой може ли да помогне с поправка/пояснение на проблема по моя код? Благодаря предварително!