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

本文关键字:一个 数字 是否是 回文 | 更新日期: 2023-09-27 18:13:20

我是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循环中被转换为布尔类型?这只是为了保持循环运行吗?

参考上述代码

        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();

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

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

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

newnum = remainder;

newnum = (newnum*10) + remainder;

在您的情况下,问题不在于您在for循环中使用的条件,只是您每次都用余数覆盖newnum,所以newnum只存储循环中计算的最后一个提醒,"忘记"了之前计算的所有其他提醒。

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

试着用笔和纸(或者用调试器(一步一步地遵循它。

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是普通圆顶吗?这种方法会说它不是。。。

最简单的方法:

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)

您有很多方法可以完成此练习。

A。您可以将输入保留为字符串并循环,每次迭代都检查索引"i"的值和索引"len-i-1"的值是否相等,如果不是false,则在循环结束时返回true。(循环应该运行到i<len/2(

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

C。有更多的方法不使用字符串解决方案,只使用计算。。

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以决定数字是否完全拆分。。接下来,我们获取数组并重新加入它,并使用输入的数字进行检查。。

使用以下代码:

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