用回文制作

时间:2015-04-24 09:42:30

标签: c# palindrome

如果数字不是回文数,则将其添加到数字反转的数字。继续这个过程,直到得到的数字是回文。考虑N = 19. 19不是回文,所以我们将其反向(91)加到它得到110.这也不是回文,所以我们加011得到121,这是一个回文。然后我们停止并打印出2(迭代次数)和121(回文)。

输入一个数字:19

2步和回文= 121

输入一个数字:1968

3步和回文= 168861

   class NumberPalindrome
   {
      static void Main(string[] args)
      {
         System.Console.WriteLine("\nProgram to check whether given number is palindrome or not. Enter -1 to exit");
         while(true)
         {
            System.Console.Write("Enter a Number (-1 to exit): ");
            string input = System.Console.ReadLine();
            int n = 0;
            try
            {
               n = Convert.ToInt32(input);
            }
            catch (System.Exception ex)
            {
               System.Console.WriteLine("Error in the input format\n\n");
               continue;
            }

            if(n < 0)
            break;
            long number = n;
            long index = 0;
            bool palindrome = true;
            int [] digits = new int [10];
            do
            {
               digits[index++] = n % 10;
               n = n / 10;
            } while(n > 0);

            for(int i = 0; i < index / 2 + 1; i++)
            {
               if(digits[i] != digits[index - 1 - i])
               {
                   palindrome = false;
                   break;
               }
            }
            if (palindrome == true)
               System.Console.WriteLine("The number {0} is a palindrome\n", number);
            else
               System.Console.WriteLine("The number {0} is NOT a palindrome\n", number);
         }
      }
   }

3 个答案:

答案 0 :(得分:0)

我不会应用所有类型的验证,但它是可以接受的。 因为我今晚很懒,所以我会根据自己的观点写出最简单的解决方案。 还有其他解决方案。如果您对其他版本感兴趣,请在此重播。

    static void Main(string[] args)
    {
        Console.WriteLine("Make With Palindrome");
        Console.WriteLine("Enter a positive number:");
        string input = Console.ReadLine();
        long receivedNumber;
        bool validnumber = Int64.TryParse(input, out receivedNumber);
        if (validnumber && receivedNumber>0)
        {
            long reversedAcceptablenumber;
            int counter = 0;
            while (true)
            {
                char[] arr = input.ToCharArray();
                Array.Reverse(arr);
                Int64.TryParse(new string(arr),out reversedAcceptablenumber);

               //instead of 3 lines above you can do that
              //Int64.TryParse(new string(input.ToCharArray().Reverse().ToArray()),outreversedAcceptablenumber)

                if (receivedNumber==reversedAcceptablenumber)
                {
                    break;
                }
                receivedNumber += reversedAcceptablenumber;
                input = receivedNumber.ToString();
                counter++;
            }
            Console.WriteLine("{0} steps and palindrome={1}",counter,reversedAcceptablenumber);
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Invalid character");
            Console.ReadLine();
        }
    }

您可以添加其他验证。

答案 1 :(得分:-1)

试试这个

protected void Button1_Click(object sender, EventArgs e)
        {int j=0;
            string s, revs = "";
            s = TextBox1.Text;
            for (int i = s.Length - 1; i >= 0; i--) //String Reverse
            {
                revs += s[i].ToString();
            }
            if (revs == s) // Checking whether string is palindrome or not
            {
                Response .Write ("String is Palindrome");
            }
            else
            {
                Response.Write("String is not Palindrome ");
                int reverse = 0;
                int numb;
                int n1;
                int b = 0;
                n1 = int.Parse(TextBox1.Text);
                numb = int.Parse(TextBox1.Text);
                while (numb > 0)
                {
                    int rem = numb % 10;
                    reverse = (reverse * 10) + rem;
                    numb = numb / 10;
                    j++;
                }
                b = reverse + n1;
                TextBox1.Text = b.ToString();

                 Response.Write(j);
               }
            }

答案 2 :(得分:-1)

我就是这样做的,这段代码仍然需要检查无效条目等,但你会得到基本的想法

    static void Main(string[] args) {
        int number = 1968;

        int palendromeSteps = FindSteps(number, 1);

        Console.WriteLine(palendromeSteps);
        Console.ReadLine();
    }

    private static int FindSteps(int number, int stepNumber) {
        var reverseNumber = ReverseInt(number);

        //If the number - it's reverse is 0 it's a palendrome 
        if (number - reverseNumber == 0) return stepNumber;
        else return FindSteps(number + reverseNumber, ++stepNumber);
    }

    public static int ReverseInt(int num) {
        int result = 0;
        while (num > 0) {
            result = result * 10 + num % 10;
            num /= 10;
        }
        return result;
    }