这听起来像是家庭作业,是的,(其他人),我问我的一位正在学习C#的朋友借给我一些他的课堂练习来掌握它。< / p>
正如标题所说:我如何检查一个数字是Palindrome?
我不是要求源代码(虽然它非常有用),而是有人解释了代码应该如何工作,以便它可以应用于许多不同的语言。
解决方案:
@statikfx搜索了SO,找到了solution。
n = num;
while (num > 0)
{
dig = num % 10;
rev = rev * 10 + dig;
num = num / 10;
}
// If (n == rev) then num is a palindrome
答案 0 :(得分:28)
我通过将整数转换为字符串,然后反转字符串,然后比较相等来检查回文。这对你来说是最好的方法,因为你刚刚开始。
由于你是在C#工作而且这是家庭作业,我会使用看起来很模糊的Python来帮助你:
def is_palindrome(i):
s = str(i)
return s[::-1] == s
将其转换为C#,您就可以得到答案。
答案 1 :(得分:12)
主要想法:
Input number: 12321
Splitting the digits of the number, put them into an array
=> array [1, 2, 3, 2, 1]
Check if array[x] = array[arr_length - x] for all x = 0..arr_length / 2
If check passed => palindrome
答案 2 :(得分:4)
有很多方法。可能最简单的是有2个索引,i在开头,j在数字末尾。你检查一下[i] == a [j]。如果是,则递增i并递减j。当我&gt;你停止学家当你到达a [i]!= a [j]的点时循环,那么它不是回文。
答案 3 :(得分:4)
接受的答案是另一种检查方式:
答案 4 :(得分:2)
这是一些有效的代码。第一个函数通过将数字转换为字符串然后将其转换为IEnumerable来测试数字是否为透明,并测试它是否等于其反向。这足以回答你的问题。 main函数只是迭代遍历测试它们的整数。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static bool IsPalindromic(long l)
{
IEnumerable<char> forwards = l.ToString().ToCharArray();
return forwards.SequenceEqual(forwards.Reverse());
}
public static void Main()
{
long n = 0;
while (true)
{
if (IsPalindromic(n))
Console.WriteLine("" + n);
n++;
}
}
}
更新:这是一种更直接的产生回文的方法。它不单独测试数字,它只是直接生成回文。这对回答你的作业并不是很有用,但也许你会发现这很有趣:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static void Main()
{
bool oddLength = true;
ulong start = 1;
while (true)
{
for (ulong i = start; i < start * 10; ++i)
{
string forwards = i.ToString();
string reverse = new string(forwards.ToCharArray()
.Reverse()
.Skip(oddLength ? 1 : 0)
.ToArray());
Console.WriteLine(forwards + reverse);
}
oddLength = !oddLength;
if (oddLength)
start *= 10;
}
}
}
答案 5 :(得分:2)
我的解决方案:
bool IsPalindrome(string str)
{
if(str.Length == 1 || str.Length == 0) return true;
return str[0] == str[str.Length-1] && IsPalindrome(str.Substring(1,str.Length-2));
}
答案 6 :(得分:1)
这是一些伪代码:
function isPalindrome(number) returns boolean
index = 0
while number != 0
array[index] = number mod 10
number = number div 10
index = index + 1
startIndex = 0;
endIndex = index - 1
while startIndex > endIndex
if array[endIndex] != array[startIndex]
return false
endIndex = endIndex - 1
startIndex = startIndex + 1
return true
请注意,这是基数10.更改第一个while循环中的两个10s以用于其他碱基。
答案 7 :(得分:1)
以下函数既适用于数字,也适用于字符串。
public bool IsPalindrome(string stringToCheck)
{
char[] rev = stringToCheck.Reverse().ToArray();
return (stringToCheck.Equals(new string(rev), StringComparison.OrdinalIgnoreCase));
}
答案 8 :(得分:0)
理论上你想将数字转换为字符串。然后将字符串传送到一个字符数组并循环数组,比较字符(i)和字符(数组长度-i),如果两个字符不相等则退出循环并返回false。如果它一直通过循环它是一个回文。
答案 9 :(得分:0)
有趣。我可能会将数字转换为字符串,然后编写一个递归函数来判断任何给定的字符串是否是一个古老的综合症。
答案 10 :(得分:0)
int n = check_textbox.Text.Length;
int check = Convert.ToInt32(check_textbox.Text);
int m = 0;
double latest=0;
for (int i = n - 1; i>-1; i--)
{
double exp = Math.Pow(10, i);
double rem = check / exp;
string rem_s = rem.ToString().Substring(0, 1);
int ret_rem = Convert.ToInt32(rem_s);
double exp2 = Math.Pow(10, m);
double new_num = ret_rem * exp2;
m=m+1;
latest = latest + new_num;
double my_value = ret_rem * exp;
int myvalue_int = Convert.ToInt32(my_value);
check = check - myvalue_int;
}
int latest_int=Convert.ToInt32(latest);
if (latest_int == Convert.ToInt32(check_textbox.Text))
{
MessageBox.Show("The number is a Palindrome number","SUCCESS",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
MessageBox.Show("The number is not a Palindrome number","FAILED",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
答案 11 :(得分:0)
public class Main {
public static boolean Ispalindromic(String word) {
if (word.length() < 2) {
return true;
}
else if (word.charAt(0) != word.charAt(word.length() - 1)) {
return false;
} else {
Ispalindromic(word.substring(1, word.length() - 1));
}
return true;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String word = sc.nextLine();
System.out.println(Ispalindromic(word) ? "it is palidromic" : "it is not palidromic");
}
}
答案 12 :(得分:0)
这是我的初学者解决方案:
Console.Write("Enter a number to check if palindrome: ");
bool palindrome = true;
int x = int.Parse(Console.ReadLine());
/* c is x length minus 1 because when counting the strings
length it starts from 1 when it should start from 0*/
int c = x.ToString().Length - 1;
string b = x.ToString();
for (int i = 0; i < c; i++)
if (b[i] != b[c - i])
palindrome = false;
if (palindrome == true)
Console.Write("Yes");
else Console.Write("No");
Console.ReadKey();
答案 13 :(得分:0)
您需要反转数字,然后将结果与原始数字进行比较。 如果匹配,则您有回文。无论数字是偶数,奇数还是对称,它都应该起作用。
public static bool IsNumberAPalindrome(long num)
{
return long.Parse(string.Join("", num.ToString().ToCharArray().Reverse().ToArray())) == num ? true : false;
}
答案 14 :(得分:0)
实现如下:
public bool IsPalindrome(int x) {
string test = string.Empty;
string res = string.Empty;
test = x.ToString();
var reverse = test.Reverse();
foreach (var c in reverse)
{
res += c.ToString();
}
return test == res;
}
答案 15 :(得分:0)