回文数:整数+字符串

来源:互联网 发布:人在国外怎么淘宝 编辑:程序博客网 时间:2024/05/06 16:09

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

原创粉丝点击