1

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

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

4

6 回答 6

4

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

newnum = remainder;

newnum = (newnum*10) + remainder;

您的问题不是您在 for 循环中使用的条件,而只是您每次都用余数覆盖 newnum,因此 newnum 仅存储在循环中计算的最后一个提醒,“忘记”所有其他它之前计算过的。

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

尝试用笔和纸(或使用调试器)一步一步地跟随它。

于 2013-05-13T10:12:12.923 回答
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 是一个plaindome 吗?这个方法会说它不是...

于 2013-05-13T10:11:48.140 回答
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)

于 2013-05-13T10:18:09.413 回答
0

你有很多方法来完成这个练习。

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

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

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

于 2013-05-13T10:15:07.597 回答
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 以确定数字是否完全拆分..接下来我们采取数组并重新加入它并检查输入数字..

于 2013-05-13T10:23:53.213 回答
-1

使用以下代码:

public boolean isPalindrom(Integer number)
{ 
   return number.Equals(int.Parse(String.Join("", String.Join("", number.ToString().ToCharArray().Reverse().ToArray()))));
}
于 2014-01-15T12:22:16.350 回答