如果数字不是回文数,则将其添加到数字反转的数字。继续这个过程,直到得到的数字是回文。考虑N = 19. 19不是回文,所以我们将其反向(91)加到它得到110.这也不是回文,所以我们加011得到121,这是一个回文。然后我们停止并打印出2(迭代次数)和121(回文)。
输入一个数字:19
2步和回文= 121
输入一个数字:1968
3步和回文= 168861
class NumberPalindrome
{
static void Main(string[] args)
{
System.Console.WriteLine("\nProgram to check whether given number is palindrome or not. Enter -1 to exit");
while(true)
{
System.Console.Write("Enter a Number (-1 to exit): ");
string input = System.Console.ReadLine();
int n = 0;
try
{
n = Convert.ToInt32(input);
}
catch (System.Exception ex)
{
System.Console.WriteLine("Error in the input format\n\n");
continue;
}
if(n < 0)
break;
long number = n;
long index = 0;
bool palindrome = true;
int [] digits = new int [10];
do
{
digits[index++] = n % 10;
n = n / 10;
} while(n > 0);
for(int i = 0; i < index / 2 + 1; i++)
{
if(digits[i] != digits[index - 1 - i])
{
palindrome = false;
break;
}
}
if (palindrome == true)
System.Console.WriteLine("The number {0} is a palindrome\n", number);
else
System.Console.WriteLine("The number {0} is NOT a palindrome\n", number);
}
}
}
答案 0 :(得分:0)
我不会应用所有类型的验证,但它是可以接受的。 因为我今晚很懒,所以我会根据自己的观点写出最简单的解决方案。 还有其他解决方案。如果您对其他版本感兴趣,请在此重播。
static void Main(string[] args)
{
Console.WriteLine("Make With Palindrome");
Console.WriteLine("Enter a positive number:");
string input = Console.ReadLine();
long receivedNumber;
bool validnumber = Int64.TryParse(input, out receivedNumber);
if (validnumber && receivedNumber>0)
{
long reversedAcceptablenumber;
int counter = 0;
while (true)
{
char[] arr = input.ToCharArray();
Array.Reverse(arr);
Int64.TryParse(new string(arr),out reversedAcceptablenumber);
//instead of 3 lines above you can do that
//Int64.TryParse(new string(input.ToCharArray().Reverse().ToArray()),outreversedAcceptablenumber)
if (receivedNumber==reversedAcceptablenumber)
{
break;
}
receivedNumber += reversedAcceptablenumber;
input = receivedNumber.ToString();
counter++;
}
Console.WriteLine("{0} steps and palindrome={1}",counter,reversedAcceptablenumber);
Console.ReadLine();
}
else
{
Console.WriteLine("Invalid character");
Console.ReadLine();
}
}
您可以添加其他验证。
答案 1 :(得分:-1)
试试这个
protected void Button1_Click(object sender, EventArgs e)
{int j=0;
string s, revs = "";
s = TextBox1.Text;
for (int i = s.Length - 1; i >= 0; i--) //String Reverse
{
revs += s[i].ToString();
}
if (revs == s) // Checking whether string is palindrome or not
{
Response .Write ("String is Palindrome");
}
else
{
Response.Write("String is not Palindrome ");
int reverse = 0;
int numb;
int n1;
int b = 0;
n1 = int.Parse(TextBox1.Text);
numb = int.Parse(TextBox1.Text);
while (numb > 0)
{
int rem = numb % 10;
reverse = (reverse * 10) + rem;
numb = numb / 10;
j++;
}
b = reverse + n1;
TextBox1.Text = b.ToString();
Response.Write(j);
}
}
答案 2 :(得分:-1)
我就是这样做的,这段代码仍然需要检查无效条目等,但你会得到基本的想法
static void Main(string[] args) {
int number = 1968;
int palendromeSteps = FindSteps(number, 1);
Console.WriteLine(palendromeSteps);
Console.ReadLine();
}
private static int FindSteps(int number, int stepNumber) {
var reverseNumber = ReverseInt(number);
//If the number - it's reverse is 0 it's a palendrome
if (number - reverseNumber == 0) return stepNumber;
else return FindSteps(number + reverseNumber, ++stepNumber);
}
public static int ReverseInt(int num) {
int result = 0;
while (num > 0) {
result = result * 10 + num % 10;
num /= 10;
}
return result;
}