时间限制:1秒
空间限制:128M
给出一个非负整数,如果他是回文数,输出他的各位和,否则输出impossible
一个非负整数
数据范围
保证所有数在1000000以内
若是回文数,则输出各位和,否则输出impossible
12321
9
这道题直接模拟即可。
为了方便处理,我们可以把输入视为字符串。那么,只要掌握以下两点:
很简单,回文串满足第 i i i个字符和倒数第 i i i个字符相同( 1 ≤ i ≤ 回文串 . s i z e ( ) 1\leq i\leq 回文串.size() 1≤i≤回文串.size())
那么,我们从前往后遍历回文串,发现不同时直接返回false
即可。
其实只需要遍历到 ⌊ 字符串 . s i z e ( ) 2 ⌋ \lfloor \frac{字符串.size()}{2}\rfloor ⌊2字符串.size()⌋即可。(如果不理解遍历到字符串末尾也可以)
bool HuiWen(string s) {
int n = s.size();
for (int i = 0; i < n / 2; i++) {
if (s[i] != s[n - i - 1])
return false;
}
return true;
}
这就很简单了,直接遍历字符串并累加即可
int cnt = 0;
for (char& c : s) {
cnt += c - '0';
}
cout << cnt << endl;
/*
* @Author: LetMeFly
* @Date: 2022-07-21 09:43:27
* @LastEditors: LetMeFly
* @LastEditTime: 2022-07-21 09:44:32
*/
#include
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
bool HuiWen(string s) {
int n = s.size();
for (int i = 0; i < n / 2; i++) {
if (s[i] != s[n - i - 1])
return false;
}
return true;
}
int main() {
string s;
cin >> s;
if (HuiWen(s)) {
int cnt = 0;
for (char& c : s) {
cnt += c - '0';
}
cout << cnt << endl;
}
else
puts("impossible");
return 0;
}
虽然代码可以复制,但最好还是自己理解后再敲哦
原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125909744