【PAT甲级题解记录】1024 Palindromic Number (25 分)

文章介绍了PAT甲级编程题1024PalindromicNumber的解题思路和解决方案。重点在于处理可能需要进行大整数加法的回文字符串,并检查加法后是否仍为回文。代码示例使用C++实现,包括字符串反转和加法操作。
摘要由CSDN通过智能技术生成

【PAT甲级题解记录】1024 Palindromic Number (25 分)

前言

Problem:1024 Palindromic Number (25 分)

Tags:字符串

Difficulty:剧情模式 想流点汗 想流点血 死而无憾

Address:1024 Palindromic Number (25 分)

问题描述

简单的字符串处理

解题思路

关键俩个点:

  1. 最多要加100次,注意数据范围并不是简单的乘以100,而是 2 100 2^{100} 2100 ,所以long long不行需要string进行大整数加法。
  2. 注意输入即是回文的情况,这种情况就直接输出N和0即可。

参考代码

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
string N;
int K;

string rev(string s) {
    reverse(s.begin(), s.end());
    return s;
}

string op(string s1) {
    string ans = "";
    string s2 = rev(s1);
    int len = s1.size();
    int pre = 0;
    for (int i = 0; i < len; i++) {
        int a = s1[i] - '0';
        int b = s2[i] - '0';
        int sum = a + b + pre;
        if (sum >= 10) {
            sum -= 10;
            pre = 1;
        } else {
            pre = 0;
        }
        ans = ans + to_string(sum);
    }
    if (pre) {
        ans = ans + "1";
    }
    reverse(ans.begin(), ans.end());
    return ans;
}

bool check(string s) {
    string t = rev(s);
    return s == t ? true : false;
}

void solution_1024() {
    cin >> N >> K;
    if (check(N)) {
        cout << N << endl << 0 << endl;
        return;
    }
    for (int i = 1; i <= K; ++i) {
        N = op(N);
        if (check(N) || i == K) {
            cout << N << endl << i << endl;
            return;
        }
    }
}
int main() {
    solution_1024();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值