PAT_甲级_1024 Palindromic Number (25分) (C++)【签到题】

目录

1,题目描述

题目大意

注意

2,思路

3,代码


1,题目描述

Sample Input 1:

67 3

Sample Output 1:

484
2

Sample Input 2:

69 3

Sample Output 2:

1353
3

题目大意

通过一种运算,可以使任意一个非回文数转换为回文数。具体操作举个例子吧。

67 + 76 = 143, and 143 + 341 = 484.

要求输出最终的回文数,以及操作的步数。

注意

  • 输入的数字N<=10^10;
  • 输入的最大步数K<=100,到达最大步数后,若仍未成为回文数,则输出当前数值,以及K;

2,思路

  • 利用vector<int> input存放输入的数字,以及答案;
  • 以字符串形式输入原始数据,并将其存入input中;
  • 设计函数:
    1. bool isPali(vector<int> &a)                                  //判断是否为回文数;
    2. vector<int> reversed(vector<int> &origin)           //反转数字
    3. vector<int> convert(vector<int> &origin)             //将原数和反转后的数求和
  •  以k为限制,先判断是否为回文,然后convert,step加一,不断重复;

3,代码

#include<iostream>
#include<vector>
using namespace std;

bool isPali(vector<int> &a){                    //判断是否为回文数
    int i = 0, j = a.size()-1;
    while(i < j){
        if(a[i] != a[j]) return false;
        i++;j--;
    }
    return true;
}

vector<int> reversed(vector<int> &origin){      //反转数字
    vector<int> res;
    for(int i = origin.size()-1; i >= 0; i--) res.push_back(origin[i]);
    return res;
}

vector<int> convert(vector<int> &origin){       //将原数和反转后的数求和
    vector<int> rev, sum;
    rev = reversed(origin);

    int c = 0, temp = 0;                        //c进位 temp暂存数据
    for(int i = origin.size()-1; i >= 0; i--){
        temp = origin[i] + rev[i] + c;
        if(temp > 9){
            c = 1;
            temp -= 10;
        }else c = 0;
        sum.push_back(temp);
    }
    if(c == 1) sum.push_back(1);
    return reversed(sum);
}

void print(vector<int> v){
    for(int i = 0; i < v.size(); i++) cout<<v[i];
}

int main(){
    int k, step = 0;
    string s;
    cin>>s>>k;

    vector<int> input;
    for(int i = 0; i < s.length(); i++){
        input.push_back(s[i] - '0');
    }

    while(step < k){                            //此处是小于(不是小于等于) 类似于for(int step = 0; step < k; step++)
        if(isPali(input) == true){
            print(input);
            cout<<endl<<step;
            return 0;
        }
        input = convert(input);
        step++;
    }
    print(input);
    cout<<endl<<k;

    return 0;
}
发布了45 篇原创文章 · 获赞 5 · 访问量 2176

猜你喜欢

转载自blog.csdn.net/qq_41528502/article/details/104298118
今日推荐