码蹄集 - MT2093 · 回文数数位
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码蹄集 - MT2093 · 回文数数位相关的知识,希望对你有一定的参考价值。
传送门
回文数数位
时间限制:1秒
空间限制:128M
题目描述
给出一个非负整数,如果他是回文数,输出他的各位和,否则输出impossible
输入描述
一个非负整数
数据范围
数据范围
保证所有数在1000000以内
输出描述
若是回文数,则输出各位和,否则输出impossible
样例一
输入
12321
输出
9
题目分析
这道题直接模拟即可。
为了方便处理,我们可以把输入视为字符串。那么,只要掌握以下两点:
- 如何判断一个字符串是否为回文数
- 如何将数字字符串的每一位求和
1. 如何判断一个字符串是否为回文数
很简单,回文串满足第 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;
2. 如何将数字字符串的每一位求和
这就很简单了,直接遍历字符串并累加即可
int cnt = 0;
for (char& c : s)
cnt += c - '0';
cout << cnt << endl;
AC代码
/*
* @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 · 回文数数位的主要内容,如果未能解决你的问题,请参考以下文章