(最近水题刷的比较多,不过还是有些收获,所以还是做个记录比较好)
http://acm.hdu.edu.cn/showproblem.php?pid=1282
分析:
题目理解起来还是简单的,基本上有两种思路:1) 将int转为string来实现; 2)直接用int做(回文串判断,相加)
第二中思路比较直接,将一个数倒置得到新的数,然后判断是否是回文数(两个数值相等);不过鄙人采用了第一种方法,因为字符串的操作不太熟练,需要联系来着。
字符串操作:
string --> int
int a;
string str="123";
a=atoi(str.c_str()); //头文件 stdlib.h
int --> string
int a;
string str;
stringstream ss; //头文件 sstream.h
ss<<a;
ss>>str;
字符串转置
string str="123";
reverse( str.begin(), str.end() ); // algorithm.h
cout<<str<<endl; //输出321
代码:
//hdu 1282 #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <sstream> #include <stdlib.h> #include <algorithm> using namespace std; #define MAXN 10000 int cnt; string s[MAXN]; bool palindrome(string e) { for(int i=0,j=e.length()-1;i<e.length();i++,j--){ if(e[i]!=e[j]) return false; } return true; } void show() { cout<<cnt-1<<endl; for(int i=0;i<cnt-1;i++) cout<<s[i]<<"--->"; cout<<s[cnt-1]<<endl; } void deal(string e) { int a; string x=e; while(1){ s[cnt++]=x; a=atoi(x.c_str()); reverse(x.begin(),x.end()); a +=atoi(x.c_str()); //123+321 stringstream ss; ss<<a; ss>>x; if(palindrome(x)) { s[cnt++]=x; break; } } show(); } int main() { freopen("in.txt","r",stdin); string str; while(cin>>str){ if(palindrome(str)){ cout<<0<<endl<<str<<endl; continue; } cnt=0; deal(str); } return 0; }
原文:http://blog.csdn.net/vuorange/article/details/24889087