标签:简单题
(最近水题刷的比较多,不过还是有些收获,所以还是做个记录比较好)
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