以编程方式检查数字是否是回文

时间:2009-11-23 20:43:51

标签: c#

这听起来像是家庭作业,是的,(其他人),我问我的一位正在学习C#的朋友借给我一些他的课堂练习来掌握它。< / p>

正如标题所说:我如何检查一个数字是Palindrome

我不是要求源代码(虽然它非常有用),而是有人解释了代码应该如何工作,以便它可以应用于许多不同的语言。


解决方案:

@statikfx搜索了SO,找到了solution

 n = num;
 while (num > 0)
 {
      dig = num % 10;
      rev = rev * 10 + dig;
      num = num / 10;
 }
// If (n == rev) then num is a palindrome

16 个答案:

答案 0 :(得分:28)

我通过将整数转换为字符串,然后反转字符串,然后比较相等来检查回文。这对你来说是最好的方法,因为你刚刚开始。

由于你是在C#工作而且这是家庭作业,我会使用看起来很模糊的Python来帮助你:

def is_palindrome(i):
    s = str(i)
    return s[::-1] == s

将其转换为C#,您就可以得到答案。

答案 1 :(得分:12)

主要想法:

Input number: 12321
Splitting the digits of the number, put them into an array
=> array [1, 2, 3, 2, 1]
Check if array[x] = array[arr_length - x] for all x = 0..arr_length / 2
If check passed => palindrome

答案 2 :(得分:4)

有很多方法。可能最简单的是有2个索引,i在开头,j在数字末尾。你检查一下[i] == a [j]。如果是,则递增i并递减j。当我&gt;你停止学家当你到达a [i]!= a [j]的点时循环,那么它不是回文。

答案 3 :(得分:4)

接受的答案是另一种检查方式:

How do I check if a number is a palindrome?

答案 4 :(得分:2)

这是一些有效的代码。第一个函数通过将数字转换为字符串然后将其转换为IEnumerable来测试数字是否为透明,并测试它是否等于其反向。这足以回答你的问题。 main函数只是迭代遍历测试它们的整数。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static bool IsPalindromic(long l)
    {
        IEnumerable<char> forwards = l.ToString().ToCharArray();
        return forwards.SequenceEqual(forwards.Reverse());
    }

    public static void Main()
    {
        long n = 0;
        while (true)
        {
            if (IsPalindromic(n))
                Console.WriteLine("" + n);
            n++;
        }
    }
}

更新:这是一种更直接的产生回文的方法。它不单独测试数字,它只是直接生成回文。这对回答你的作业并不是很有用,但也许你会发现这很有趣:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static void Main()
    {
        bool oddLength = true;
        ulong start = 1;
        while (true)
        {
            for (ulong i = start; i < start * 10; ++i)
            {
                string forwards = i.ToString();
                string reverse = new string(forwards.ToCharArray()
                                                    .Reverse()
                                                    .Skip(oddLength ? 1 : 0)
                                                    .ToArray());
                Console.WriteLine(forwards + reverse);
            }
            oddLength = !oddLength;
            if (oddLength)
                start *= 10;
        }
    }
}

答案 5 :(得分:2)

我的解决方案:

bool IsPalindrome(string str)
{
    if(str.Length == 1 || str.Length == 0) return true;
    return str[0] == str[str.Length-1] && IsPalindrome(str.Substring(1,str.Length-2));
}

答案 6 :(得分:1)

这是一些伪代码:

function isPalindrome(number) returns boolean
  index = 0
  while number != 0
    array[index] = number mod 10
    number = number div 10
    index = index + 1

  startIndex = 0;
  endIndex = index - 1

  while startIndex > endIndex
    if array[endIndex] != array[startIndex]
      return false
    endIndex = endIndex - 1
    startIndex = startIndex + 1

  return true

请注意,这是基数10.更改第一个while循环中的两个10s以用于其他碱基。

答案 7 :(得分:1)

以下函数既适用于数字,也适用于字符串。

public bool IsPalindrome(string stringToCheck)
{
   char[] rev = stringToCheck.Reverse().ToArray();
   return (stringToCheck.Equals(new string(rev), StringComparison.OrdinalIgnoreCase));
}

zamirsblog.blogspot.com

答案 8 :(得分:0)

理论上你想将数字转换为字符串。然后将字符串传送到一个字符数组并循环数组,比较字符(i)和字符(数组长度-i),如果两个字符不相等则退出循环并返回false。如果它一直通过循环它是一个回文。

答案 9 :(得分:0)

有趣。我可能会将数字转换为字符串,然后编写一个递归函数来判断任何给定的字符串是否是一个古老的综合症。

答案 10 :(得分:0)

 int n = check_textbox.Text.Length;
        int check = Convert.ToInt32(check_textbox.Text);
        int m = 0;
        double latest=0;
        for (int i = n - 1; i>-1; i--)
        {
                double exp = Math.Pow(10, i);
                double rem = check / exp;
                string rem_s = rem.ToString().Substring(0, 1);
                int ret_rem = Convert.ToInt32(rem_s);
                double exp2 = Math.Pow(10, m);
                double new_num = ret_rem * exp2;
                m=m+1;
                latest = latest + new_num;
                double my_value = ret_rem * exp;
                int myvalue_int = Convert.ToInt32(my_value);
                check = check - myvalue_int;
        }
        int latest_int=Convert.ToInt32(latest);
        if (latest_int == Convert.ToInt32(check_textbox.Text))
        {
            MessageBox.Show("The number is a Palindrome      number","SUCCESS",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }
        else
        {
            MessageBox.Show("The number is not a Palindrome number","FAILED",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
        }

答案 11 :(得分:0)

public class Main {

    public static boolean Ispalindromic(String word) {

        if (word.length() < 2) {
            return true;
        }
        else if (word.charAt(0) != word.charAt(word.length() - 1)) {
            return false;
        } else {
            Ispalindromic(word.substring(1, word.length() - 1));
        }
        return true;
    }

    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String word = sc.nextLine();
        System.out.println(Ispalindromic(word) ? "it is palidromic" : "it is not palidromic");
    }
}

答案 12 :(得分:0)

这是我的初学者解决方案:

        Console.Write("Enter a number to check if palindrome: ");
        bool palindrome = true;
        int x = int.Parse(Console.ReadLine());
        /* c is x length minus 1 because when counting the strings 
        length it starts from 1 when it should start from 0*/
        int c = x.ToString().Length - 1;
        string b = x.ToString();
        for (int i = 0; i < c; i++)
            if (b[i] != b[c - i])
                palindrome = false;
        if (palindrome == true)
            Console.Write("Yes");
        else Console.Write("No");
        Console.ReadKey();

答案 13 :(得分:0)

您需要反转数字,然后将结果与原始数字进行比较。 如果匹配,则您有回文。无论数字是偶数,奇数还是对称,它都应该起作用。

public static bool IsNumberAPalindrome(long num)
{
   return long.Parse(string.Join("", num.ToString().ToCharArray().Reverse().ToArray())) == num ? true : false;
}

答案 14 :(得分:0)

实现如下:

public bool IsPalindrome(int x) {
    string test = string.Empty;
    string res = string.Empty;

    test = x.ToString();
    var reverse = test.Reverse();

    foreach (var c in reverse)
    {
        res += c.ToString();
    }

    return test == res;
}

答案 15 :(得分:0)

  1. 你有一个字符串,它可以是整数,也可以是字符,无所谓。
  2. 您可以将此字符串转换为数组,具体取决于字符串包含的字符类型,这可以用于 toCharArray 方法或任何其他相关方法。
  3. 然后您使用 .NET 提供的反向方法来反转您的数组,现在您有两个数组,一个是原始数组,另一个是您反转的数组。
  4. 然后使用比较运算符(不是赋值运算符!)来检查反向运算符是否与原始运算符相同。