⬆︎
×

[PAT-A] 1024 Palindromic Number

Hyplus目录

Java

package PAT_A1024_Palindromic_Number;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;

public class Main {
    // 检查是否为回文数
    public static boolean isPalindromic(List<Integer> num) {
        for (int i = 0, j = num.size() - 1; i < j; i++, j--) {
            if (!num.get(i).equals(num.get(j))) {
                return false;
            }
        }
        return true;
    }

    // 大数加法
    public static List<Integer> add(List<Integer> a, List<Integer> b) {
        List<Integer> c = new ArrayList<>();
        int t = 0;
        for (int i = 0; i < a.size() || i < b.size() || t > 0; i++) {
            int s = t;
            if (i < a.size()) s += a.get(i);
            if (i < b.size()) s += b.get(i);
            c.add(s % 10);
            t = s / 10;
        }
        return c;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        String n = input[0];
        int k = Integer.parseInt(input[1]);

        List<Integer> a = new ArrayList<>();
        for (int i = n.length() - 1; i >= 0; i--) {
            a.add(n.charAt(i) - '0');
        }

        int cnt = 0;
        if (!isPalindromic(a)) {
            while (cnt < k) {
                List<Integer> b = new ArrayList<>(a);
                Collections.reverse(b);
                a = add(a, b);
                cnt++;
                if (isPalindromic(a)) break;
            }
        }

        for (int i = a.size() - 1; i >= 0; i--) {
            System.out.print(a.get(i));
        }

        System.out.println();
        System.out.println(cnt);
    }
}

C++

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

using namespace std;

bool check(vector<int> &num) {
    for (int i = 0, j = num.size() - 1; i < j; i++, j--)
        if (num[i] != num[j]) return false;
    return true;
}

vector<int> add(vector<int> &a, vector<int> &b) {
    vector<int> c;
    int t = 0;
    for (int i = 0; i < a.size() || i < b.size() || t; i++) {
        int s = t;
        if (i < a.size()) s += a[i];
        if (i < b.size()) s += b[i];
        c.push_back(s % 10);
        t = s / 10;
    }
    return c;
}

int main() {
    string n;
    int k;
    cin >> n >> k;

    vector<int> a;
    for (int i = n.size() - 1; i >= 0; i--) a.push_back(n[i] - '0');

    int cnt = 0;
    if (!check(a)) {
        while (cnt < k) {
            vector<int> b(a.rbegin(), a.rend());
            a = add(a, b);
            cnt++;
            if (check(a)) break;
        }
    }

    for (int i = a.size() - 1; i >= 0; i--) cout << a[i];

    cout << endl << cnt << endl;

    return 0;
}

发表评论