这是我做的回文测试的常规方法,但我需要一个递归函数来检查数字是否为回文数据。
int number, firstnumber, lastnumber, secondnumber, fourthnumber;
readingnumber:
Console.Write("Please enter your palindrome number(5 digits) :" );
//reading the integer number entered
number = Int32.Parse(Console.ReadLine());
//making condition if the number is less than 5 digits
if (number / 100000 != 0)
goto readingnumber;
else
{
//we are taking each element alone
firstnumber = number / 10000;
lastnumber = number % 10;
fourthnumber = (number % 100) / 10;
secondnumber = (number % 10000) / 1000;
//making if condition to verify if the number is palindrom or not
if (firstnumber == lastnumber && secondnumber == fourthnumber)
Console.WriteLine("\n\nthe number you've enter is palindrom");
else
Console.WriteLine("\n\nthe number you've enter is not palindrom");
//end of program
Console.WriteLine("\n\n\n\t\tPlease enter any key to exit ...");
}
Console.ReadLine();
答案 0 :(得分:1)
字符串palindrom是否
所以
public static Boolean IsPalindrom(String value) {
if (null == value)
return true; //TODO: or false or throw exception
if (value.Length <= 1)
return true;
else
return (value[0] == value[value.Length - 1]) &&
(IsPalindrom(value.Substring(1, value.Length - 2)));
}
如果你想测试一个号码(例如12321
)作为回文,只需将其转换为string
:
int value = 12321;
Boolean result = IsPalindrom(value.ToString(CultureInfo.InvariantCulture));
答案 1 :(得分:1)
一般来说, NOT 以递归方式使用Substring
作为最终创建大量字符串的好习惯(实际上,这里所有字符串的内存使用量都会增加二次,长度为字符串)。
String.Intern
的MSDN参考说:
公共语言运行库通过维护一个名为intern pool的表来保存字符串存储,该表包含对程序中以编程方式声明或创建的每个唯一文字字符串的单个引用。因此,具有特定值的文字字符串实例仅在系统中存在一次。
对于任何给定的字符串,例如"abcdedcba"
,如果递归使用Substring
,您最终会放置"bcdedcb"
,"cdedc"
,"ded"
,并"e"
不必要地进入实习池。
相反,最好将相同的字符串传递给递归方法,并改变两个索引来确定要比较哪些字符。字符串函数很慢,但整数是值类型,可以通过放弃同性恋来创建和丢弃。
<强>实施强>
/// <summary>
/// Returns true if the string is a palindrome (an empty string is a palindrome).
/// Returns false if the string is null or not a palindrome.
/// </summary>
public static bool IsPalindrome(string value)
{
if ( value == null )
return false;
if ( value.Length == 0 )
return true;
return isPalindrome(value, 0, value.Length - 1);
}
private static bool isPalindrome(string value, int startChar, int endChar)
{
if ( value[startChar] != value[endChar] )
return false;
if ( startChar >= endChar )
return true;
return isPalindrome(value, startChar + 1, endChar - 1);
}
<强>用法强>
public static void Main()
{
var a = IsPalindrome(""); // true
var b = IsPalindrome("1"); // true
var c = IsPalindrome("11"); // true
var d = IsPalindrome("121"); // true
var e = IsPalindrome("123"); // false
}
答案 2 :(得分:0)
<强> Run Here 强>
class Program
{
public static void Main()
{
var x = 545;
var y = 548785445;
Console.WriteLine(IsPalindrome(x.ToString()));
Console.WriteLine(IsPalindrome(y.ToString()));
}
public static bool IsPalindrome(string text)
{
if (text.Length <= 1)
return true;
else
{
if (text[0] != text[text.Length - 1])
return false;
else
return IsPalindrome(text.Substring(1, text.Length - 2));
}
}
}