作业1-224——P1015 [NOIP1999 普及组] 回文数

本文介绍了一种使用C++编写的高精度算法,用于判断输入字符串经过多次翻转操作后是否变为回文。作者提供了简化后的代码示例,强调了字符转ASCll数字在处理中的应用。
摘要由CSDN通过智能技术生成

题目描述

思路 

首先此题为一道高精度题,然后本题按照题目意思模拟即可。我们可以开两个数组来记录高精度数字,这样方便我们处理。判断“该数组是否回文”、“c翻转存入d再做c+d”可以写成两个单独的函数。然后主程序组织一下他们即可。注意好退出循环的条件。

还用到ASCll码~

参考代码

#include<bits/stdc++.h>
const int S=303;
int n,a[S],l;
char c[S],d[S];
inline void add()
{
    for (int i=0;i<l;++i)
        d[l-i-1]=c[i];
    l+=2;
    for (int i=0;i<l;++i)
    {
        c[i]+=d[i];
        if (c[i]>=n) c[i+1]++,c[i]-=n;
    }
    while (!c[l-1]) --l;
}
inline bool pd()
{
    for (int i=0;i<l;++i)
        if (c[i]!=c[l-1-i]) return false;
    return true;
}
int main()
{
    scanf("%d",&n);
    scanf("%s",s);
    l=strlen(c);
    for (int i=0;i<l;++i)
    {
        if (c[i]>='0' && c[i]<='9') c[i]-='0';
        else c[i]=c[i]-"A"+10;
    }
    int step=0;
    while (!pd())
    {
        ++step;
        if (step>30) break;
        add();
    }
    if (step<=30) printf("STEP=%d\n",step);
    else puts("Impossible!");
    return 0;
}

简化代码

#include <bits/stdc++.h>
const int S=303;
int n,a[S],l;
char c[S],d[S];
 void add()
{
    for (int i=0;i<l;++i)
        d[l-i-1]=c[i];
    l+=2;
    for (int i=0;i<l;++i)
    {
        c[i]+=d[i];
        if (c[i]>=n) c[i+1]++;c[i]-=n;
    }
    while (!c[l-1]) --l;
 bool pd()
{
    for (int i=0;i<l;++i)
        if (c[i]!=c[l-1-i]) return false;
    return true;
}
int main()
{
    scanf("%d",&n);
    scanf("%s",s);
    l=strlen(c);
    for (int i=0;i<l;++i)
    {
        if (c[i]>='0' && c[i]<='9') c[i]-='0';
        else c[i]=c[i]-55;
    }
    int step=0;
    while (!pd())
    {
        ++step;
        if (step>30) break;
        add();
    }
    if (step<=30) printf("STEP=%d\n",step);
    else puts("Impossible!");
    return 0;
}-->inline可以不要,A可以转换为ASCll数字;

学会的知识

代码可以简化,带字符可以转换为ASCll数字;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值