大佬求助

P1015 [NOIP1999 普及组] 回文数

huangyanjun123456 @ 2023-04-08 16:46:49

P1015 [NOIP1999 普及组] 回文数 不会这题

要求: 1.用c++ 2.只可以用主函数 3.代码要规范


by xxc123 @ 2023-04-16 13:55:47

@huangyanjun123456 不过只写main()代码有点丑长 求关注

#include<stdio.h>
#include<string.h>
int main()
{
    int p=1,ans=0,i,j,n,x,gg=0,jj,a[105],b[105];
    char c[105];
    scanf("%d",&n);
    scanf("%s",c);
    j=0;
    while(c[j]!=0)
    {
        if((c[j]>='0')&&(c[j]<='9'))a[j+1]=c[j]-'0';
        else a[j+1]=c[j]-'A'+10;/*先转化一下,方便进行后面的加法运算*/
        j++;
    }
    while(ans<=30)/*题目要求*/
    {
        gg=0;
        i=1;
    while(i<=j)
            {
            x=a[j-i+1]+a[i]+gg;
            gg=x/n;/*gg表示进位*/
            b[j-i+1]=x%n;
            i++;
        }
        if(gg!=0)b[0]=gg;
        if(gg!=0)
        {
            for(i=1;i<=j+1;i++)a[i]=b[i-1];
            j++;
        }
        else for(i=1;i<=j;i++)a[i]=b[i];
        ans++;
        i=1;
        jj=j;
        p=1;
        while(i<=jj/*判断是否为回文数*/
        {
            if(a[i]!=a[jj])p=0;
            i++;
            jj--;
        }
        if(p)
        {
            printf("STEP=%d",ans);
            return 0;
        }
    }
    printf("Impossible!");
    return 0;
}

原来我写法


#include<iostream>
#include<cstring>
using namespace std;
char c[101];
int s1[201],s2[201],s[201],len;
void add(int n)
{
    int x=0,k=201;
    for(int i=len-1;i>=0;i--)
    {
        s[--k]=s1[i]+s2[i]+x;
        x=s[k]/n;
        s[k]%=n;
    }
    if(x!=0)
    {
        s[--k]=x;
        len++;
    }
    for(int i=0,j=k;j<=200;i++,j++)
        s1[i]=s[j];
}
void charTOint(int n)
{
    for(int i=0;i<len;i++)
    {
        if(c[i]>='0'&&c[i]<='9')
            s1[i]=c[i]-'0';
        else if(c[i]>='a'&&c[i]<='z')   
            s1[i]=c[i]-'a'+10;
        else
            s1[i]=c[i]-'A'+10;      
    } 
}
void turn()
{
    for(int i=0;i<len;i++)
        s2[i]=s1[len-1-i];
}
bool hws()
{
    for(int i=0,j=len-1;i<j;i++,j--)
        if(s1[i]!=s1[j]) 
            return false;
    return true;
}
int main()
{
    int n;
    cin>>n>>c;
    len=strlen(c);
    charTOint(n);
    int step=0;
    while(step<=30)
    {
        if(hws())
        {
            cout<<"STEP="<<step<<endl;
            return 0;
        }
        step++;
        turn();
        add(n);
    }
    cout<<"Impossible!"<<endl;
    return 0;
}

by huangyanjun123456 @ 2023-04-16 20:08:19

我也五年级你好厉害啊


by huangyanjun123456 @ 2023-04-16 20:09:56

我都不会用函数


by huangyanjun123456 @ 2023-04-17 21:44:01

@xxc123


|