PAT甲级1136 A Delayed Palindrome(20 分)

题目链接

注意:

1、PAT提交不能用gets()函数。

2、如果数字本身就是一个Palindrome number直接输出。

3、数字有1000位,要使用字符数组。

#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>

using namespace std;

bool isPalNum(char C[])
{//判断是否是一个Palindroome number
    int len = strlen(C);
    for(int i=0; i<len/2; i++)
    {
        if(C[i] != C[len-i-1])
        {
            return false;
        }
    }
    return true;
}
int main()
{
    char A[1024];
    char B[1024];
    char C[1024];
    int time = 0;
    bool flag = false;
    scanf("%s",&A);

    if(isPalNum(A))
    {//判断输入数字是否为Palindroome number
        printf("%s is a palindromic number.\n",A);
        return 0;
    }
    while(time<10&&(!flag))
    {
        //得到B
        int len  = strlen(A);
        for(int i=0; i<len; i++)
        {
            B[len-i-1] = A[i];
        }
        B[len] = '\0';

        //计算A+B = C
        stack<char> result;//将计算结果保存到栈中,再放到数组C里面
        int ys = 0;
        for(int i=len-1; i>=0; i--)
        {
            int v = (A[i]-'0')+(B[i]-'0');
            v+=ys;
            result.push((v%10)+'0');
            ys = v/10;

        }
        if(ys>0)
            result.push(ys+'0');
        int i=0;
        while(!result.empty())
        {
            C[i++] = result.top();
            result.pop();
        }
        C[i] = '\0';
        //判断结果是不是一个Palindroome number
        flag = isPalNum(C)?true:false;
        printf("%s + %s = %s\n", A, B, C);
        time++;
        //将C赋值给A
        len = strlen(C);
        for(int j=0; j<len; j++)
        {
            A[j] = C[j];
        }
        A[len] = '\0';
    }
    if(time >= 10)
    {
        printf("Not found in 10 iterations.\n");
    }
    else if(time < 10)
    {
        printf("%s is a palindromic number.\n",C);
    }

    return 0;
}


发布了88 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Q_smell/article/details/80975793