I have made a simple C# script that will find the largest palindrome made by the product of two numbers. These numbers will be between a minimum and maximum value, inputted by int.Parse(Console.ReadLine())
. Is there a way to make this better?
It is brute force, however I tried to make it use fewer numbers if one combination gives a smaller palindrome. The numbers are generated in a for
loop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
namespace ProjectEuler
{
class Solution
{
static void Main( /*I am not sure what the point is for String args. If anybody can explain?*/ )
{
Console.Clear();
Console.WriteLine("What would the maiximum value be for these numbers?");
int max = int.Parse(Console.ReadLine());
Console.WriteLine("\nWhat would the minimum value be for these numbers?");
int min = int.Parse(Console.ReadLine());
int largestNumb1 = 0;
int largestNumb2 = 0;
int generatedPalindrome = 0;
for (int number1 = max; number1 >= min; number1--)
{
for (int number2 = max; number2 >= min; number2--)
{
string generatedNumber = (number1 * number2).ToString();
if (IsPalindrome(generatedNumber))
{
if (int.Parse(generatedNumber) > generatedPalindrome)
{
generatedPalindrome = number1 * number2;
largestNumb1 = number1;
largestNumb2 = number2;
//This is mainly done to increase 'subtle' performance, by skipping numbers
//that will never give a larger number than the previous palindrome
number1--;
number2 = max;
}
else if (int.Parse(generatedNumber) < generatedPalindrome)
{
//This is mainly done to increase 'subtle' performance, by skipping numbers
//that will never give a larger number than the previous palindrome
number1--;
number2 = max;
}
}
}
}
PrintAnswer(generatedPalindrome, largestNumb1, largestNumb2);
}
static bool IsPalindrome(string generatedNumber)
{
char[] answerChar = generatedNumber.ToCharArray();
Array.Reverse(answerChar);
string reversedString = new string(answerChar);
if (generatedNumber == reversedString)
{
return true;
}
else
{
return false;
}
}
static void PrintAnswer(int generatedPalindrome, int largestNumb1, int largestNumb2)
{
Console.Clear();
if (generatedPalindrome != 0)
{
Console.WriteLine("Largest possible palindrome given limit: {0}\nNumbers used: {1} & {2}", generatedPalindrome, largestNumb1, largestNumb2);
Console.ReadLine();
}
else
{
Console.WriteLine("Sorry, but no valid palindrome was generated given your values.\nWould you like to try again? (y)");
if (Console.ReadLine() == "y")
{
Main();
}
else
{
return;
}
}
}
}
}