1 整数判断回文数
int IsPalindrome(int iNumber){ //判断是否为回文数的函数
int temp=0;
int number = iNumber;
while(number){ //颠倒数后保存到temp中
temp=temp*10+(number%10);
number=number/10;
}
if(iNumber==temp) //是回文数,返回1
return 1;
else
return 0;
}
2字符串
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=495
大家都知道,DXH 幼时性格怪癖,小朋友都不喜欢和他玩,这种情况一直到 DXH 的少年时期也没有改变。
少年时期的 DXH 迷上了”回文串”,“回文串”是指正着读倒着读都一样的字符串。DXH一个人的时候喜欢在地上随便写一个字符串 S,然后在这个字符串的右边添加尽量少的字符(可以不添加,就是 0 个),使得这个字符串变成“回文串”。但玩的时间长了,DXH 的手也酸了,聪明的你能帮他写一个程序,算出这个添加最少字符形成的回文串吗?
一个字符串 S[1..L]被称为回文串,当且仅当 S[i] = S[L - i + 1] (1 <= i <= L)。
#include <iostream>
#include <string>
using std::endl;
using std::cin;
using std::cout;
using std::string;
//判断是否为回文串
int is_HuiWenStr(string s)
{
int j = s.length() - 1;
for(int i=0; i<j; ++i , --j)
{
if(s[i] != s[j])
{
return 0;
}
}
return 1;
}
int main()
{
#ifdef LOCAL
freopen("input.txt" , "r" , stdin);
freopen("output.txt" , "w" , stdout);
#endif
int N;
cin >> N;
while(N--)
{
string str , result;
cin >>str;
if(is_HuiWenStr(str))
{
cout << str << endl;
}else{
int length = str.length();
//枚举添加的字符数量
for(int i=0;i<length; ++i)
{
result = str;
for(int j=i;j>=0;--j)
{
result+= str[j];
}
if(is_HuiWenStr(result))
{
cout << result << endl;
break;
}
}
}
}
}
最长回文子串
暴力算法:我们求出一个最长公共子串的时候,我们检查一下这个子串是不是一个回文,如果是,那这个子串就是原串S的最长回文子串;如果不是,那么就去求下一个次长公共子串,以此类推。
参考:http://blog.csdn.net/computer_liuyun/article/details/27967963