码蹄集 - MT2093 - 回文数数位

@TOC


回文数数位

时间限制:1秒
空间限制:128M


题目描述

给出一个非负整数,如果他是回文数,输出他的各位和,否则输出impossible


输入描述

一个非负整数

数据范围

数据范围

保证所有数在1000000以内


输出描述

若是回文数,则输出各位和,否则输出impossible


样例一

输入

1
12321

输出

1
9

题目分析

这道题直接模拟即可。

为了方便处理,我们可以把输入视为字符串。那么,只要掌握以下两点:

  1. 如何判断一个字符串是否为回文数
  2. 如何将数字字符串的每一位求和

1. 如何判断一个字符串是否为回文数

很简单,回文串满足第$i$个字符和倒数第$i$个字符相同($1\leq i\leq 回文串.size()$)

那么,我们从前往后遍历回文串,发现不同时直接返回false即可。

其实只需要遍历到$\lfloor \frac{字符串.size()}{2}\rfloor$即可。(如果不理解遍历到字符串末尾也可以)

1
2
3
4
5
6
7
8
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;
}

2. 如何将数字字符串的每一位求和

这就很简单了,直接遍历字符串并累加即可

1
2
3
4
5
int cnt = 0;
for (char& c : s) {
cnt += c - '0';
}
cout << cnt << endl;

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
* @Author: LetMeFly
* @Date: 2022-07-21 09:43:27
* @LastEditors: LetMeFly
* @LastEditTime: 2022-07-21 09:44:32
*/
#include <bits/stdc++.h>
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


码蹄集 - MT2093 - 回文数数位
https://blog.letmefly.xyz/2022/07/21/MaTiJi - MT2093 - 回文数数位/
作者
Tisfy
发布于
2022年7月21日
许可协议