码蹄集 - MT2093 · 回文数数位

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码蹄集 - MT2093 · 回文数数位相关的知识,希望对你有一定的参考价值。

传送门


回文数数位

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


题目描述

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


输入描述

一个非负整数

数据范围

数据范围

保证所有数在1000000以内


输出描述

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


样例一

输入

12321

输出

9

题目分析

这道题直接模拟即可。

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

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

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

很简单,回文串满足第 i i i个字符和倒数第 i i i个字符相同( 1 ≤ i ≤ 回文串 . s i z e ( ) 1\\leq i\\leq 回文串.size() 1i回文串.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 · 回文数数位的主要内容,如果未能解决你的问题,请参考以下文章

码蹄集 - MT3251 - 多重回文

码蹄集 - MT2094 - 回文之时:第4组数据错误

算法竞赛入门码蹄集新手村600题(MT1301-1350)

码蹄集 - MT1265 · 区间完数

算法竞赛入门码蹄集新手村600题(MT1201-1250)

码蹄集 - MT2065 - 整数大小比较