Problem z mnożeniem wartości

0

Witam,

Chcę napisać program który wyszukuję liczby pierwsze w podanym zakresie, następnie mnoży każdą poszczególną liczbę przez siebie i na samym końcu wśród tych liczb wyszukuje i zwraca największą, która jest palindromem.Problem z programem, który napisałem polega na tym, że w pewnym zakresie liczby są na minusie i nie bardzo wiem dlaczego. Również zwrócony wynik jest błędny. W momencie kiedy primesList.Add(i * i); zostawię primesList.Add(i); program generuje liczby poprawnie, ale nie spełnia założonych wymagań. Poniżej cały kod. Z góry dziękuję za pomoc.

class Program
{
    public static int MAX = 100000;

    static void Main(string[] args)
    {
        List<int> primes = getDoubledPrimes(MAX);
        List<int> palindromesList = new List<int>();
        foreach (int i in primes)
        {
            bool palindrome = IsPalindrome(i);
            if (palindrome)
            {
                palindromesList.Add(i);
            }
        }

        foreach(int p in palindromesList)
        {
            int maxValue = palindromesList.Max();
            Console.WriteLine("This is the biggest palindrome: " + maxValue);
            break;
        }
        Console.ReadKey();
    }

    static List<int> getDoubledPrimes(int max)
    {
        List<int> primesList = new List<int>();
        bool isPrime = true;
        for (int i = 2; i < max; i++)
        {
            for (int j = 2; j < i / 2; j++)
            {

                if (i % j == 0)
                {
                    isPrime = false;
                    break;
                }

            }
            if (isPrime)
            {
                primesList.Add(i * i);
            }
            isPrime = true;
        }
        return primesList;

    }

    public static bool IsPalindrome(int num)
    {
        int n = num;
        int rev = 0;
        while (n > 0)
        {
            int dig = n % 10;
            rev = rev * 10 + dig;
            n = n / 10;
        }
        return num == rev;
    }        
}

}

1

Rozdziel to jeszcze; najpierw funkcja zwracająca listę liczb pierwszych, potem Zmapuj na nią podniesienie do kwadratu, a na koniec Odfiltruj palindromy. Na każdy ten proces oddzielna funkcja, plus dwie dodatkowe: isPrime i isPalindrom. Wtedy Będziesz mógł stestowac każdą z tych "podstawowych" funkcji i jak one będą poprawne, to złożona z nich w ten sposób całość też musi działać.

0

Int ma limit wartosci w okolicach 2 miliardów, jeśli testujesz program na liczbach wiekszych od 40-50 tysiecy to podnosząc do kwadratu przekraczasz zakres i licznik sie cofa. Stad ujemne wartosci. Spróbuj zminić int na long lub poszukaj formatu bez podobnych ograniczeń, nie pamietam jego nazwy.

0

Jeśli interesują nas tylko liczby dodatnie, to po co w ogóle używać typów ze znakiem? To nie Java.

1 użytkowników online, w tym zalogowanych: 0, gości: 1