在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();
任何形式的帮助都非常感谢!!谢谢:(
我不确定你在问什么,因为你在网上找到的第二段代码应该可以解决你的问题。如果你只是更改行,你的代码就能工作
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
您也可以对s1
和s2
使用整数,并返回(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()))));
}