在C#中找出一个数字是否是回文

时间:2013-05-13 09:58:30

标签: c#

我是C#的新手,正在做这个程序作为练习。我已经设法让我的程序打印用户给出的反转输入数量,但是当我继续检查它是否是回文时,它不能正确计算答案。它总是打印'不是回文'。

经过一些错误检查后,我意识到这样做的原因是因为newnum中存储的最后一个数字只是被反转后的最后一个数字,而不是整个数字。我怎样才能纠正这个?

我的代码

        int i, remainder = 0, newnum = 0;
        Console.WriteLine("Enter a Number: ");
        int uinput = Convert.ToInt32((Console.ReadLine()));
        for (i = uinput; i > 0; i = (i / 10))
        {
            remainder = i % 10;
            Console.Write(remainder);

            newnum = remainder;

        }


        if (newnum == uinput)
        {
            Console.WriteLine("The Number {0} is a palindrome", uinput);
        }
        else
        {
            Console.WriteLine("Number is not a palidrome");
        }
        Console.WriteLine(uinput);
        Console.WriteLine(newnum);
        Console.ReadKey();
    }

我也在网上看了另一个代码示例,但我不明白的是为什么num在while循环中被转换为boolean类型?这只是为了保持循环运行吗?

以上代码

        int num, rem, sum = 0, temp;
        //clrscr();
        Console.WriteLine("\n >>>> To Find a Number is Palindrome or not <<<< ");
        Console.Write("\n Enter a number: ");
        num = Convert.ToInt32(Console.ReadLine());
        temp = num;
        while (Convert.ToBoolean(num))
        {
            rem = num % 10;  //for getting remainder by dividing with 10
            num = num / 10; //for getting quotient by dividing with 10
            sum = sum * 10 + rem; /*multiplying the sum with 10 and adding
                       remainder*/
        }
        Console.WriteLine("\n The Reversed Number is: {0} \n", sum);
        if (temp == sum) //checking whether the reversed number is equal to entered number
        {
            Console.WriteLine("\n Number is Palindrome \n\n");
        }
        else
        {
            Console.WriteLine("\n Number is not a palindrome \n\n");
        }
        Console.ReadLine();

非常感谢任何形式的帮助!!谢谢:)

6 个答案:

答案 0 :(得分:4)

我不确定你在问什么,因为你在网上找到的第二段代码应该可以解决你的问题。 如果您只是更改行

,您的代码就可以运行
newnum = remainder;

newnum = (newnum*10) + remainder;

你的情况下的问题不是你在for循环中使用的条件,只是你每次都用剩余的覆盖newnum,所以newnum只存储在循环中计算的最后一个提醒,“遗忘“以前计算过的所有其他人。

要反转这个数字,每次进入循环时,你应该在newnum的右边添加你找到的最后一个余数,这实际上相当于将所有数字乘以10并添加余数。

尝试使用笔和纸(或使用调试器)逐步跟踪它。

答案 1 :(得分:2)

public bool isPalindome(int num)
{
  string sNum = num.ToString();
  for (int i = 0; i<sNum.Length; i++) 
      if (sNum[i] != sNum[sNum.Length-1-i]) return false;

  return true;
}

我认为会这样做......未经测试!!

当dognose(和Eren)正确断言你只需要走到中途

public bool isPalindome(int num)
{
  string sNum = num.ToString();
  for (int i = 0; i < sNum.Length/2; i++) 
      if (sNum[i] != sNum[sNum.Length-1-i]) return false;

  return true;
}

您还需要确定负数发生了什么..即-121是否是一个原子?这种方法会说它不是......

答案 2 :(得分:2)

最简单的方法:

public static Boolean isPalindrom(Int32 number){
  char[] n1 = number.ToString().ToCharArray();
  char[] n2 = number.ToString().ToCharArray();
  Array.Reverse(n2);

  String s1 = new String(n1);
  String s2 = new String(n2);

  return (s1 == s2);
}

https://dotnetfiddle.net/HQduT5

你也可以使用s1s2的整数并返回(s1-s2 == 0)

答案 3 :(得分:0)

你有很多方法可以完成这项练习。

一个。您可以将输入保留为字符串并将其循环,每次迭代以检查索引'i'的值和索引'len-i-1'的值是否等于,否则返回false,否则返回循环结束真正。 (循环应该运行直到i

B中。您可以创建一个新字符串并从头到尾插入文本,然后比较原始字符串和结果字符串是否等于。

℃。没有使用字符串解决方案有更多方法,只需计算..

答案 4 :(得分:0)

int x;
cin<<x; //input the number
int ar[];
int i=0;
temp2=0;
while(x/10 != 0)
    {
        int temp=x%10;
        ar[i]=temp;
        x=x/10;
        i++;
    }
for(int j=0, j<i,j++)
    {
        temp2=temp2*10+ar[j];
    }
if(temp2==x){cout<<"palindrome"}
    else {"not palindrome"}

好的是逻辑:

我们首先输入数字x(它可以是任意长度)..接下来我们将数字拆分为数组..执行此操作的条件是我们检查qoutient以确定数字是否完全拆分。接下来我们取出数组并重新加入并检查输入数字..

答案 5 :(得分:-1)

使用以下代码:

public boolean isPalindrom(Integer number)
{ 
   return number.Equals(int.Parse(String.Join("", String.Join("", number.ToString().ToCharArray().Reverse().ToArray()))));
}