http://202.121.199.212/JudgeOnline/problem.php?cid=1079&pid=21
分析: 回文串判断,字符串处理
1. atoi 函数(ascii tointeger 将字符串转换成整型数)
头文件: #include <stdlib.h>
int atoi(const char *nptr);
由于程序中使用string类,所以应该用 str.c_str() 将string转为c语言下的字符串数组。
2. itoa函数(与atoi功能相反)
char
*itoa(intvalue,
char
*string,intradix);
(与atoi用法区别)
3. stringstream
头文件: #include <sstream>
input:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999
#include <iostream> #include <stdio.h> #include <string> #include <sstream> using namespace std; #define MAXN 60 int main() { freopen("in.txt","r",stdin); string s; stringstream ss; int t; int n,a[MAXN]; cin>>t; getchar(); //读取换行 while(t--){ getline(cin,s); ss.clear(); ss.str(s); //ss<<s; n=0; while(1){ ss>>a[n++]; if(ss.fail()) break; } for(int i=0;i<n-1;i++) cout<<a[i]<<" "; //n比数字多1个 cout<<endl; } return 0; }
output:
输出到double一样;
有关string的用法在string类说明中再行分析。
代码:
#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 deal(string e) { int a; string x=e; while(1){ cnt++; if(cnt>8) {cnt=0;break;} 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)) { break; } } printf("%d\n",cnt); } int main() { int n; string str; scanf("%d",&n); while(n--){ cin>>str; cnt=0; deal(str); } return 0; }
shu_1180 回文数(一),布布扣,bubuko.com
时间: 2024-10-13 22:15:30