Hello我想让程序在用户输入数字时检查是否有回文数。但是我的工作根本不起作用......你们能帮助我......
class Program
{
static void Main(string[] args)
{
int i = 0, j = 0 ;
int numbers =Convert.ToInt32( Console.ReadLine());
i = numbers % 10;
do
{
j = numbers / 10;
}
while (j < 10);
if (i == j)
{
Console.WriteLine(" this is palindrome number");
}
else
{
Console.WriteLine("not a palindrome");
}
答案 0 :(得分:4)
最快的方法是reverse the string并将其与原始版本进行比较。你真的不需要整数转换。
您可能希望通过剥离前导零(即010
)来过滤或更正用户的输入。例如:string number = Convert.ToInt32(Console.ReadLine()).ToString();
答案 1 :(得分:0)
您不必将其转换为整数。 你可以从字符串中查看它。
取第一个字符和最后一个字符进行比较。
迭代第一个指针+1和最后一个指针-1然后比较。
继续此过程,直到您处于字符串的中间位置。
答案 2 :(得分:0)
您可以关注这些链接。
#include<stdio.h>
#include<math.h>
void main()
{
long int n, num, rev = 0, dig;
clrscr();
printf("\n\n\t ENTER A NUMBER...: ");
scanf("%ld", &num);
n = num;
while(num>0)
{
dig = num % 10;
rev = rev * 10 + dig;
num = num / 10;
}
if (n == rev)
printf("\n\t GIVEN NUMBER IS A PALINDROME");
else
printf("\n\t GIVEN NUMBER NOT A PALINDROME");
getch();
}
答案 3 :(得分:0)
首先,通过将数字转换为Int32
,用户可以输入的位数是有限的。
通过使用模运算,i
变量将包含输入数字的最后一位数字。
将数字除以10,j
最终应包含输入的第一个数字。但是,除非“j
小于10”,否则您不会将其除以“j
小于10”时将其除以“有效地使j
的内容依赖在输入的位数上。
即使您要修复while
条件,此代码也只会检查第一个和最后一个数字,使其仅适用于1,2和3位数字。
答案 4 :(得分:0)
你需要这样的东西:
bool isPalindrome = true;
string s = "300212003";
for (int i = 0; i < (s.Length / 2); i++)
{
if (s[i] != s[s.Length - i - 1])
{
isPalindrome = false;
break;
}
}
Console.WriteLine(isPalindrome);
它比恢复字符串并比较它更快,只需要O(n / 2)次操作。
答案 5 :(得分:-1)
当你能以任何一种方式阅读它时,有些东西是回文,所以当反面与原版相同时。 所以只需反转输入字符串并将其与原始字符串进行比较。