PAT(A)1024 Palindromic Number (25分)(高精度加法)

在这里插入图片描述

Sample Input 1

67 3

Sample Output 1

484
2

Sample Input 2

69 3

Sample Output 2

1353
3

思路:
考虑高精度,写一个check判断回文数,从0开始判断,如果本身就是回文或k为0,则直接输出,否则按照运算律计算。、
不难,但是我的代码写的不是很优雅。
代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

typedef long long ll;

bool check(int* a, int len)
{
    for (int i = 0; i < len / 2; ++i)
        if (a[i] != a[len - 1 - i])
            return 0;
    return 1;
}

int main()
{
    char str[100];
    int k;

    scanf("%s", str);
    scanf("%d", &k);

    int a[100], b[200] = {0}, c[100];
    int len = strlen(str);

    for (int i = 0; i < strlen(str); ++i)
    {
        a[i] = str[i] - '0';
    }
    
    if (k == 0)
    {
        for (int i = 0; i < len; ++i)
            printf("%d", a[i]);
        printf("\n%d", k);
        return 0;
    }

    if (check(a, len))
    {
        for (int i = 0; i < len; ++i)
        {
            printf("%d", a[i]);
        }
        printf("\n0");
        return 0;
    }

    for (int j = 1; j <= k; ++j)
    {
        memset(b, 0, sizeof(b));
        for (int i = 0; i < len; ++i)
        {
             b[i] = a[i] + a[len - 1 - i] + b[i];
             if (b[i] >= 10)
             {
                 b[i + 1]++;
                 b[i] %= 10;
                 if (i == len - 1)
                 {
                     len++;
                     break;
                 }
             }
        }
        if (check(b, len))
        {
            for (int i = len - 1; i >= 0; --i)
                printf("%d", b[i]);
            printf("\n%d", j);
            break;
        }
        else if (j == k)
        {
            for (int i = len - 1; i >= 0; --i)
                printf("%d", b[i]);
            printf("\n%d", j);
            break;
        }
        else
        {
            for (int i = 0; i <= len; ++i)
            {
                a[i] = b[i];
            }
        }
    }

    // getchar(); getchar();
    return 0;
}

发布了161 篇原创文章 · 获赞 7 · 访问量 7104

猜你喜欢

转载自blog.csdn.net/weixin_43778744/article/details/103970620