ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[PAT] A1024 Palindromic Number

2020-02-29 11:52:19  阅读:185  来源: 互联网

标签:tmp digit PAT string int Number A1024 include 回文


【题目大意】

给一个数字N,使其与自身的逆序数相加,问能否在K次内,得到一个回文数(Palindromic Number)。

【思路】

用string、数组相加即可。

【坑】

如果N就是回文数,则输出次数是0次。

【tips】

翻转两个数可以用reverse函数。这里可以只用string,不用数组,简少代码量。

 

        string s=a;
        reverse(s.begin(),s.end());

 

一开始需要判断N本身是否为回文数,则判断回文数的操作应该放在循环一进去的时候;又由于数字本身与翻转后的结果相等即“回文”,因此直接用翻转后的结果与本身比较,如果相等就退出循环,否则直接二者相加即可。

【AC代码】

1 用string+数组解决,较为繁琐。

#include<iostream>
#include<string>
#include <algorithm>
using namespace std;
#define N 10000
int main()
{
    string input;
    cin >> input;
    int times;
    cin >> times;
    if (times == 0)
    {
        cout << input << endl;
        cout << 0;
        return 0;
    }
    int i, k;
    int num[N], dnum[N];
    int digit = input.size();
    for (i = 0; i < digit; i++)
    {
        num[i] = input[i] - '0';
        dnum[digit - i - 1] = num[i];
    }
    int ans[N];
    for (k = 0; k < times; k++)
    {
        bool jinwei = 0;//进位标志
        for (i = 0; i < digit / 2; i++)
            if (num[i] != num[digit - i - 1])
                break;
        if (i == digit / 2)
            break;
        for (i = 0; i < digit; i++)
        {
            ans[i] = num[i] + dnum[i] + jinwei;
            if (ans[i] >= 10)
            {
                ans[i] -= 10;
                jinwei = 1;
            }
            else jinwei = 0;
        }
        if (jinwei == 1)
        {
            ans[digit] = 1;
            digit++;
        }
        for (i = 0; i < digit; i++)
        {
            dnum[i] = ans[i];
            num[digit - i - 1] = dnum[i];
        }
    }
    for (i = digit - 1; i >= 0; i--)
        cout << dnum[i];
    cout << endl;
    if (k < times)cout << k;
    else cout << times;
    return 0;
}
View Code

 

2 简化:用string,翻转用reserve函数。

 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 using namespace std;
 5 string add(string a, string b) 
 6 {
 7     int tmp = 0;//进位标志
 8     string c = a;
 9     for (int i = b.length() - 1; i >= 0; i--) 
10     {
11         c[i] = (a[i] - '0' + b[i] - '0' + tmp) % 10 + '0';
12         if ((a[i] - '0' + b[i] - '0' + tmp) < 10)
13             tmp = 0;
14         else
15             tmp = 1;
16     }
17     if (tmp == 1)
18         c = '1' + c;
19     return c;
20 }
21 int main()
22 {
23     string a;
24     int k;
25     cin >> a >> k;
26     int c;//c保存迭代的次数
27     for (c = 0; c < k; c++) {
28         string s = a;
29         reverse(s.begin(), s.end());
30         if (a == s)//判断是否是回文数
31             break;
32         a = add(a, s);
33     }
34     cout << a << endl << c << endl;
35     return 0;
36 }

 

标签:tmp,digit,PAT,string,int,Number,A1024,include,回文
来源: https://www.cnblogs.com/yue36/p/12382133.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有